summaryrefslogtreecommitdiff
path: root/jb-ui/src
diff options
context:
space:
mode:
authorMax Nanis2026-02-18 20:42:03 -0500
committerMax Nanis2026-02-18 20:42:03 -0500
commit3eaa56f0306ead818f64c3d99fc6d230d9b970a4 (patch)
tree9fecc2f1456e6321572e0e65f57106916df173e2 /jb-ui/src
downloadamt-jb-3eaa56f0306ead818f64c3d99fc6d230d9b970a4.tar.gz
amt-jb-3eaa56f0306ead818f64c3d99fc6d230d9b970a4.zip
HERE WE GO, HERE WE GO, HERE WE GO
Diffstat (limited to 'jb-ui/src')
-rw-r--r--jb-ui/src/JBApp.tsx178
-rw-r--r--jb-ui/src/api_fsb/.gitignore4
-rw-r--r--jb-ui/src/api_fsb/.npmignore1
-rw-r--r--jb-ui/src/api_fsb/.openapi-generator-ignore23
-rw-r--r--jb-ui/src/api_fsb/.openapi-generator/FILES255
-rw-r--r--jb-ui/src/api_fsb/.openapi-generator/VERSION1
-rw-r--r--jb-ui/src/api_fsb/README.md11
-rw-r--r--jb-ui/src/api_fsb/api.ts13874
-rw-r--r--jb-ui/src/api_fsb/base.ts86
-rw-r--r--jb-ui/src/api_fsb/common.ts150
-rw-r--r--jb-ui/src/api_fsb/configuration.ts115
-rw-r--r--jb-ui/src/api_fsb/docs/AccountType.md30
-rw-r--r--jb-ui/src/api_fsb/docs/AdjustedAfter.md19
-rw-r--r--jb-ui/src/api_fsb/docs/AdjustedBefore.md19
-rw-r--r--jb-ui/src/api_fsb/docs/AdjustedTimestamp.md18
-rw-r--r--jb-ui/src/api_fsb/docs/AdjustmentType.md22
-rw-r--r--jb-ui/src/api_fsb/docs/AggregateBySource.md22
-rw-r--r--jb-ui/src/api_fsb/docs/AmtCashoutMethodData.md20
-rw-r--r--jb-ui/src/api_fsb/docs/AuditLog.md33
-rw-r--r--jb-ui/src/api_fsb/docs/AuditLogLevel.md22
-rw-r--r--jb-ui/src/api_fsb/docs/Body.md26
-rw-r--r--jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost.md20
-rw-r--r--jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost.md20
-rw-r--r--jb-ui/src/api_fsb/docs/BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost.md20
-rw-r--r--jb-ui/src/api_fsb/docs/BrokerageProductPayoutEvent.md47
-rw-r--r--jb-ui/src/api_fsb/docs/BucketTask.md29
-rw-r--r--jb-ui/src/api_fsb/docs/BuyerId.md18
-rw-r--r--jb-ui/src/api_fsb/docs/Cardinality.md10
-rw-r--r--jb-ui/src/api_fsb/docs/CashMailCashoutMethodData.md22
-rw-r--r--jb-ui/src/api_fsb/docs/CashMailOrderData.md36
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutMethodForeignValue.md25
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutMethodForeignValueResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutMethodOut.md50
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutMethodResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutMethodsResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutRequestInfo.md29
-rw-r--r--jb-ui/src/api_fsb/docs/CashoutRequestResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/Category.md28
-rw-r--r--jb-ui/src/api_fsb/docs/CategoryAssociation.md29
-rw-r--r--jb-ui/src/api_fsb/docs/ContestApi.md234
-rw-r--r--jb-ui/src/api_fsb/docs/ContestEndCondition.md23
-rw-r--r--jb-ui/src/api_fsb/docs/ContestEndConditionTargetEntryAmount.md18
-rw-r--r--jb-ui/src/api_fsb/docs/ContestEndReason.md15
-rw-r--r--jb-ui/src/api_fsb/docs/ContestEntryRule.md29
-rw-r--r--jb-ui/src/api_fsb/docs/ContestEntryTrigger.md13
-rw-r--r--jb-ui/src/api_fsb/docs/ContestPrize.md32
-rw-r--r--jb-ui/src/api_fsb/docs/ContestPrizeKind.md12
-rw-r--r--jb-ui/src/api_fsb/docs/ContestStatus.md12
-rw-r--r--jb-ui/src/api_fsb/docs/ContestWinner.md29
-rw-r--r--jb-ui/src/api_fsb/docs/CountStat.md22
-rw-r--r--jb-ui/src/api_fsb/docs/CreateCashMailCashoutMethodRequest.md24
-rw-r--r--jb-ui/src/api_fsb/docs/CreateCashoutRequest.md24
-rw-r--r--jb-ui/src/api_fsb/docs/CreatePayPalCashoutMethodRequest.md24
-rw-r--r--jb-ui/src/api_fsb/docs/Currency.md26
-rw-r--r--jb-ui/src/api_fsb/docs/CurrentAmount.md19
-rw-r--r--jb-ui/src/api_fsb/docs/DashboardApi.md59
-rw-r--r--jb-ui/src/api_fsb/docs/Data.md34
-rw-r--r--jb-ui/src/api_fsb/docs/DefaultApi.md139
-rw-r--r--jb-ui/src/api_fsb/docs/DeliveryStatus.md24
-rw-r--r--jb-ui/src/api_fsb/docs/Direction.md11
-rw-r--r--jb-ui/src/api_fsb/docs/DurationSummary.md35
-rw-r--r--jb-ui/src/api_fsb/docs/EventEnvelope.md32
-rw-r--r--jb-ui/src/api_fsb/docs/EventMessage.md24
-rw-r--r--jb-ui/src/api_fsb/docs/EventType.md22
-rw-r--r--jb-ui/src/api_fsb/docs/ExtStatusCode1.md18
-rw-r--r--jb-ui/src/api_fsb/docs/ExtStatusCode2.md18
-rw-r--r--jb-ui/src/api_fsb/docs/ExtStatusCode3.md18
-rw-r--r--jb-ui/src/api_fsb/docs/FacetValue.md18
-rw-r--r--jb-ui/src/api_fsb/docs/Finished.md18
-rw-r--r--jb-ui/src/api_fsb/docs/GeoIPInformation.md90
-rw-r--r--jb-ui/src/api_fsb/docs/HTTPValidationError.md20
-rw-r--r--jb-ui/src/api_fsb/docs/IntegrationMode.md10
-rw-r--r--jb-ui/src/api_fsb/docs/Leaderboard.md55
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardApi.md139
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardCode.md13
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardContestUserView.md60
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardFrequency.md13
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardRow.md24
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardWinner.md40
-rw-r--r--jb-ui/src/api_fsb/docs/LeaderboardWinnerResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/LedgerAccount.md34
-rw-r--r--jb-ui/src/api_fsb/docs/LedgerEntry.md28
-rw-r--r--jb-ui/src/api_fsb/docs/LedgerTransaction.md30
-rw-r--r--jb-ui/src/api_fsb/docs/ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner.md86
-rw-r--r--jb-ui/src/api_fsb/docs/MarketProfileKnowledge.md27
-rw-r--r--jb-ui/src/api_fsb/docs/MarketplaceBucket.md40
-rw-r--r--jb-ui/src/api_fsb/docs/MarketplaceInventorySummary.md32
-rw-r--r--jb-ui/src/api_fsb/docs/MarketplaceOfferwall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/MarketplaceOfferwallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/MarketplaceSummary.md22
-rw-r--r--jb-ui/src/api_fsb/docs/MaxEntryAmountPerUser.md19
-rw-r--r--jb-ui/src/api_fsb/docs/MaxGaugeBySource.md22
-rw-r--r--jb-ui/src/api_fsb/docs/MilestoneContestEndCondition.md23
-rw-r--r--jb-ui/src/api_fsb/docs/MilestoneUserView.md66
-rw-r--r--jb-ui/src/api_fsb/docs/OfferWallCategoryRequest.md26
-rw-r--r--jb-ui/src/api_fsb/docs/OfferWallInfo.md20
-rw-r--r--jb-ui/src/api_fsb/docs/OfferWallRequestYieldmanParams.md28
-rw-r--r--jb-ui/src/api_fsb/docs/OfferwallApi.md1286
-rw-r--r--jb-ui/src/api_fsb/docs/OfferwallReason.md20
-rw-r--r--jb-ui/src/api_fsb/docs/OneShotOfferwall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/OneShotOfferwallBucket.md26
-rw-r--r--jb-ui/src/api_fsb/docs/OneShotOfferwallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/OrderData.md37
-rw-r--r--jb-ui/src/api_fsb/docs/POPFinancial.md35
-rw-r--r--jb-ui/src/api_fsb/docs/PatternValidation.md22
-rw-r--r--jb-ui/src/api_fsb/docs/Payload.md40
-rw-r--r--jb-ui/src/api_fsb/docs/PayoutConfig.md23
-rw-r--r--jb-ui/src/api_fsb/docs/PayoutStatus.md19
-rw-r--r--jb-ui/src/api_fsb/docs/PayoutSummary.md35
-rw-r--r--jb-ui/src/api_fsb/docs/PayoutTransformation.md23
-rw-r--r--jb-ui/src/api_fsb/docs/PayoutTransformationPercentArgs.md24
-rw-r--r--jb-ui/src/api_fsb/docs/PayoutType.md29
-rw-r--r--jb-ui/src/api_fsb/docs/PaypalCashoutMethodData.md22
-rw-r--r--jb-ui/src/api_fsb/docs/PingMessage.md22
-rw-r--r--jb-ui/src/api_fsb/docs/PongMessage.md22
-rw-r--r--jb-ui/src/api_fsb/docs/Product.md72
-rw-r--r--jb-ui/src/api_fsb/docs/ProductBalances.md68
-rw-r--r--jb-ui/src/api_fsb/docs/ProductUserApi.md179
-rw-r--r--jb-ui/src/api_fsb/docs/ProfilingConfig.md34
-rw-r--r--jb-ui/src/api_fsb/docs/ProfilingInfoResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/ProfilingQuestionsApi.md264
-rw-r--r--jb-ui/src/api_fsb/docs/PropertyType.md12
-rw-r--r--jb-ui/src/api_fsb/docs/RaffleUserView.md68
-rw-r--r--jb-ui/src/api_fsb/docs/RedemptionCurrency.md27
-rw-r--r--jb-ui/src/api_fsb/docs/ReportApi.md64
-rw-r--r--jb-ui/src/api_fsb/docs/ReportNotes.md18
-rw-r--r--jb-ui/src/api_fsb/docs/ReportTask.md24
-rw-r--r--jb-ui/src/api_fsb/docs/ReportValue.md23
-rw-r--r--jb-ui/src/api_fsb/docs/ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet.md86
-rw-r--r--jb-ui/src/api_fsb/docs/ResponseWebsocketEventsDocsWsEventsDocsGet.md28
-rw-r--r--jb-ui/src/api_fsb/docs/Scope.md12
-rw-r--r--jb-ui/src/api_fsb/docs/Selector.md18
-rw-r--r--jb-ui/src/api_fsb/docs/SessionAdjustedStatus.md13
-rw-r--r--jb-ui/src/api_fsb/docs/SessionConfig.md25
-rw-r--r--jb-ui/src/api_fsb/docs/SessionEnterPayload.md22
-rw-r--r--jb-ui/src/api_fsb/docs/SessionFinishPayload.md32
-rw-r--r--jb-ui/src/api_fsb/docs/SessionStatusCode2.md33
-rw-r--r--jb-ui/src/api_fsb/docs/ShippingCarrier.md14
-rw-r--r--jb-ui/src/api_fsb/docs/ShippingMethod.md16
-rw-r--r--jb-ui/src/api_fsb/docs/SingleEntryBucket.md22
-rw-r--r--jb-ui/src/api_fsb/docs/SingleEntryOfferWall.md31
-rw-r--r--jb-ui/src/api_fsb/docs/SingleEntryOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/SoftPairBucket.md34
-rw-r--r--jb-ui/src/api_fsb/docs/SoftPairOfferwall.md31
-rw-r--r--jb-ui/src/api_fsb/docs/SoftPairOfferwallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/Source.md48
-rw-r--r--jb-ui/src/api_fsb/docs/SourceConfig.md35
-rw-r--r--jb-ui/src/api_fsb/docs/SourcesConfig.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StartedAfter.md19
-rw-r--r--jb-ui/src/api_fsb/docs/StartedBefore.md19
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallOfferWall.md31
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallPlusOfferWall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/StarwallPlusOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StatisticalSummaryStat.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StatisticalSummaryValue.md34
-rw-r--r--jb-ui/src/api_fsb/docs/StatsMessage.md26
-rw-r--r--jb-ui/src/api_fsb/docs/StatsSnapshot.md62
-rw-r--r--jb-ui/src/api_fsb/docs/Status.md15
-rw-r--r--jb-ui/src/api_fsb/docs/StatusApi.md155
-rw-r--r--jb-ui/src/api_fsb/docs/StatusCode1.md45
-rw-r--r--jb-ui/src/api_fsb/docs/StatusInfoResponseFail.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StatusResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StatusResponseFailure.md22
-rw-r--r--jb-ui/src/api_fsb/docs/StatusSuccessFail.md20
-rw-r--r--jb-ui/src/api_fsb/docs/StreakFulfillment.md11
-rw-r--r--jb-ui/src/api_fsb/docs/StreakPeriod.md12
-rw-r--r--jb-ui/src/api_fsb/docs/StreakState.md12
-rw-r--r--jb-ui/src/api_fsb/docs/StreamsApi.md104
-rw-r--r--jb-ui/src/api_fsb/docs/SubscribeMessage.md22
-rw-r--r--jb-ui/src/api_fsb/docs/SupplierTag.md21
-rw-r--r--jb-ui/src/api_fsb/docs/SupplyConfig.md21
-rw-r--r--jb-ui/src/api_fsb/docs/SupplyPolicy.md51
-rw-r--r--jb-ui/src/api_fsb/docs/SurveyEligibilityCriterion.md33
-rw-r--r--jb-ui/src/api_fsb/docs/SurveyId.md18
-rw-r--r--jb-ui/src/api_fsb/docs/TangoCashoutMethodData.md30
-rw-r--r--jb-ui/src/api_fsb/docs/TaskEnterPayload.md28
-rw-r--r--jb-ui/src/api_fsb/docs/TaskFinishPayload.md38
-rw-r--r--jb-ui/src/api_fsb/docs/TaskStatusResponse.md63
-rw-r--r--jb-ui/src/api_fsb/docs/TasksStatusResponse.md28
-rw-r--r--jb-ui/src/api_fsb/docs/TopNBucket.md38
-rw-r--r--jb-ui/src/api_fsb/docs/TopNOfferWall.md31
-rw-r--r--jb-ui/src/api_fsb/docs/TopNOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusBucket.md46
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusOfferWall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusOfferWallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/TopNPlusRecontactBucket.md44
-rw-r--r--jb-ui/src/api_fsb/docs/UPKImportance.md24
-rw-r--r--jb-ui/src/api_fsb/docs/USDeliveryAddress.md34
-rw-r--r--jb-ui/src/api_fsb/docs/UpkItem.md24
-rw-r--r--jb-ui/src/api_fsb/docs/UpkProperty.md35
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestion.md46
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionChoice.md30
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionChoiceOut.md30
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionConfiguration.md32
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionConfigurationMC.md20
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionConfigurationSLIDER.md26
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionConfigurationTE.md22
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionOut.md52
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionResponse.md30
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionSelectorHIDDEN.md8
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionSelectorMC.md16
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionSelectorSLIDER.md10
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionSelectorTE.md12
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionType.md14
-rw-r--r--jb-ui/src/api_fsb/docs/UpkQuestionValidation.md20
-rw-r--r--jb-ui/src/api_fsb/docs/Uri.md19
-rw-r--r--jb-ui/src/api_fsb/docs/User.md40
-rw-r--r--jb-ui/src/api_fsb/docs/UserAmount.md19
-rw-r--r--jb-ui/src/api_fsb/docs/UserAmountToday.md19
-rw-r--r--jb-ui/src/api_fsb/docs/UserCpiString.md19
-rw-r--r--jb-ui/src/api_fsb/docs/UserCreateConfig.md23
-rw-r--r--jb-ui/src/api_fsb/docs/UserHealthConfig.md22
-rw-r--r--jb-ui/src/api_fsb/docs/UserInfo.md22
-rw-r--r--jb-ui/src/api_fsb/docs/UserInfoResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskAdjustment.md34
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskComplete.md35
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionTypeSummary.md26
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionTypesSummary.md26
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionUserBonus.md32
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionUserPayout.md34
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponse.md34
-rw-r--r--jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponseTransactionsInner.md36
-rw-r--r--jb-ui/src/api_fsb/docs/UserProfile.md32
-rw-r--r--jb-ui/src/api_fsb/docs/UserProfileKnowledge.md28
-rw-r--r--jb-ui/src/api_fsb/docs/UserProfileKnowledgeAnswer.md26
-rw-r--r--jb-ui/src/api_fsb/docs/UserProfileResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/UserProfileUpdateRequest.md20
-rw-r--r--jb-ui/src/api_fsb/docs/UserProfilesResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/UserQuestionAnswerIn.md23
-rw-r--r--jb-ui/src/api_fsb/docs/UserStreak.md40
-rw-r--r--jb-ui/src/api_fsb/docs/UserType.md36
-rw-r--r--jb-ui/src/api_fsb/docs/UserWalletBalance.md28
-rw-r--r--jb-ui/src/api_fsb/docs/UserWalletBalanceResponse.md24
-rw-r--r--jb-ui/src/api_fsb/docs/UserWalletConfig.md27
-rw-r--r--jb-ui/src/api_fsb/docs/ValidationError.md24
-rw-r--r--jb-ui/src/api_fsb/docs/ValidationErrorLocInner.md18
-rw-r--r--jb-ui/src/api_fsb/docs/WXETOfferwall.md29
-rw-r--r--jb-ui/src/api_fsb/docs/WXETOfferwallBucket.md26
-rw-r--r--jb-ui/src/api_fsb/docs/WXETOfferwallResponse.md22
-rw-r--r--jb-ui/src/api_fsb/docs/WallAdjustedStatus.md14
-rw-r--r--jb-ui/src/api_fsb/docs/WallOut.md56
-rw-r--r--jb-ui/src/api_fsb/docs/WallOutAdjustedStatus.md18
-rw-r--r--jb-ui/src/api_fsb/docs/WallOutReportValue.md18
-rw-r--r--jb-ui/src/api_fsb/docs/WallOutStatus.md18
-rw-r--r--jb-ui/src/api_fsb/docs/WallOutStatusCode1.md19
-rw-r--r--jb-ui/src/api_fsb/docs/WallOutStatusCode2.md19
-rw-r--r--jb-ui/src/api_fsb/docs/WallStatusCode2.md21
-rw-r--r--jb-ui/src/api_fsb/docs/WalletApi.md478
-rw-r--r--jb-ui/src/api_fsb/docs/YieldManConfig.md22
-rw-r--r--jb-ui/src/api_fsb/git_push.sh57
-rw-r--r--jb-ui/src/api_fsb/index.ts18
-rw-r--r--jb-ui/src/api_fsb/openapi.json1
-rw-r--r--jb-ui/src/api_fsb/openapitools.json7
-rw-r--r--jb-ui/src/components/Footer.tsx36
-rw-r--r--jb-ui/src/components/Leaderboard.tsx0
-rw-r--r--jb-ui/src/components/Profiling.tsx759
-rw-r--r--jb-ui/src/components/Wallet.tsx464
-rw-r--r--jb-ui/src/components/ui/button.tsx64
-rw-r--r--jb-ui/src/components/ui/checkbox.tsx30
-rw-r--r--jb-ui/src/components/ui/confetti.tsx146
-rw-r--r--jb-ui/src/components/ui/dot-pattern.tsx156
-rw-r--r--jb-ui/src/components/ui/field.tsx246
-rw-r--r--jb-ui/src/components/ui/label.tsx22
-rw-r--r--jb-ui/src/components/ui/magic-card.tsx101
-rw-r--r--jb-ui/src/components/ui/pagination.tsx127
-rw-r--r--jb-ui/src/components/ui/separator.tsx28
-rw-r--r--jb-ui/src/components/ui/skeleton.tsx13
-rw-r--r--jb-ui/src/hooks.ts11
-rw-r--r--jb-ui/src/index.css141
-rw-r--r--jb-ui/src/main.tsx19
-rw-r--r--jb-ui/src/models/app.ts37
-rw-r--r--jb-ui/src/models/appSlice.ts188
-rw-r--r--jb-ui/src/models/grlStatsSlice.ts54
-rw-r--r--jb-ui/src/models/profilingQuestionsSlice.ts436
-rw-r--r--jb-ui/src/models/profilingUtils.ts177
-rw-r--r--jb-ui/src/pages/Home.tsx13
-rw-r--r--jb-ui/src/pages/Preview.tsx288
-rw-r--r--jb-ui/src/pages/Result.tsx123
-rw-r--r--jb-ui/src/pages/Work.tsx765
-rw-r--r--jb-ui/src/pages/max-and-lulu.jpgbin0 -> 774803 bytes
-rw-r--r--jb-ui/src/store.ts30
-rw-r--r--jb-ui/src/types/matomo.d.ts7
-rw-r--r--jb-ui/src/vite-env.d.ts17
293 files changed, 28858 insertions, 0 deletions
diff --git a/jb-ui/src/JBApp.tsx b/jb-ui/src/JBApp.tsx
new file mode 100644
index 0000000..5c99e61
--- /dev/null
+++ b/jb-ui/src/JBApp.tsx
@@ -0,0 +1,178 @@
+import {
+ EventMessage,
+ PingMessage,
+ PongMessage,
+ PongMessageKindEnum,
+ StatsMessage,
+ StatusApi,
+ SubscribeMessage, SubscribeMessageKindEnum,
+ TaskStatusResponse,
+ UserWalletBalance,
+ UserWalletBalanceResponse,
+ WalletApi
+} from "@/api_fsb";
+import Footer from "@/components/Footer";
+import { useAppDispatch } from "@/hooks";
+import { bpid, routeBasename, tagManager } from "@/lib/utils";
+import { setAssignmentID, setProductUserID, setTurkSubmitTo } from "@/models/appSlice";
+import { addStatsData } from "@/models/grlStatsSlice";
+import Home from "@/pages/Home";
+import Preview from "@/pages/Preview";
+import Result from "@/pages/Result";
+import Work from "@/pages/Work";
+import { BrowserRouter, Outlet, Route, Routes, useSearchParams } from "react-router-dom";
+import useWebSocket from 'react-use-websocket';
+
+import { useEffect } from "react";
+
+import Wallet from "@/components/Wallet";
+import "@/index.css";
+import { setTaskStatus, setUserWalletBalance } from "@/models/appSlice";
+import { Profiling } from "./components/Profiling";
+
+type Message = PingMessage | PongMessage | SubscribeMessage | EventMessage | StatsMessage;
+
+function isStatsMessage(msg: Message): msg is StatsMessage {
+ return msg.kind === 'stats';
+}
+
+function isPingMessage(msg: Message): msg is PingMessage {
+ return msg.kind === 'ping';
+}
+
+function QueryParamProcessor() {
+ const dispatch = useAppDispatch()
+ const [searchParams] = useSearchParams();
+
+ useEffect(() => {
+ const worker_id = searchParams.get('workerId');
+ const assignment_id = searchParams.get('assignmentId');
+ const tsid = searchParams.get('tsid');
+ const turkSubmitTo = searchParams.get('turkSubmitTo');
+
+ if (turkSubmitTo) {
+ dispatch(setTurkSubmitTo(turkSubmitTo))
+ }
+
+ if (worker_id) {
+ dispatch(setProductUserID(worker_id))
+
+ new WalletApi().getUserWalletBalanceProductIdWalletGet(
+ bpid, // productId
+ worker_id, // bpuid
+ ).then(res => {
+ const response = res.data as UserWalletBalanceResponse;
+ const balance = response.wallet as UserWalletBalance;
+ dispatch(setUserWalletBalance(balance));
+ });
+ }
+
+ if (assignment_id) {
+ dispatch(setAssignmentID(assignment_id))
+ }
+
+ if (tsid) {
+ new StatusApi().getTaskStatusProductIdStatusTsidGet(
+ bpid, // productId
+ tsid).then(res => {
+ const response: TaskStatusResponse = res.data;
+ dispatch(setTaskStatus(response))
+ }).catch((error) => {
+ console.error("Error fetching task status:", error);
+ });
+ }
+
+ }, [searchParams]);
+
+ return <Outlet />;
+}
+
+const Layout = () => {
+ return (
+ <div className="flex flex-col min-h-screen">
+
+ <main className="flex flex-1 bg-zinc-200">
+ <div className="flex flex-col items-center justify-center flex-1">
+ <div className="
+ w-full max-w-full
+ p-2 bg-white shadow-lg
+ text-center space-y-4
+ md:max-w-5/8 md:rounded-lg
+ rounded-none
+ ">
+ <Wallet />
+ <Profiling />
+ <Outlet />
+ </div>
+ </div>
+ </main >
+
+ <footer className="bg-slate-700 text-zinc-200 p-2 text-center font-mono">
+ <Footer />
+ </footer>
+
+ </div >
+ );
+};
+
+function JBApp() {
+ const dispatch = useAppDispatch()
+
+ const { sendJsonMessage, lastMessage } = useWebSocket(
+ "wss://fsb.generalresearch.com/ws/events/", {
+ onOpen: () => {
+ const subscribe: SubscribeMessage = {
+ "kind": SubscribeMessageKindEnum.Subscribe,
+ "product_id": bpid
+ }
+ sendJsonMessage(subscribe)
+ }
+ }
+ );
+
+ useEffect(() => {
+ if (lastMessage !== null) {
+ let msg: Message = JSON.parse(lastMessage.data);
+
+ if (isStatsMessage(msg)) {
+ dispatch(addStatsData(msg.data))
+
+ } else if (isPingMessage(msg)) {
+ const pong: PongMessage = {
+ "kind": PongMessageKindEnum.Pong,
+ }
+ sendJsonMessage(pong)
+ }
+ }
+ }, [lastMessage]);
+
+ useEffect(() => {
+ if (!tagManager) return;
+
+ var _mtm = window._mtm = window._mtm || [];
+ _mtm.push({ 'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start' });
+ var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
+ g.async = true;
+ g.src = tagManager;
+ if (s.parentNode) {
+ s.parentNode.insertBefore(g, s);
+ }
+ }, [tagManager])
+
+ return (
+ <BrowserRouter basename={routeBasename}>
+ <Routes>
+ <Route element={<QueryParamProcessor />}>
+ <Route element={<Layout />}>
+ <Route path="/" element={<Home />} />
+ <Route path="/preview/" element={<Preview />} />
+ <Route path="/work/" element={<Work />} />
+ <Route path="/result/" element={<Result />} />
+ </Route>
+ </Route>
+ </Routes>
+ </BrowserRouter>
+ )
+}
+
+export default JBApp; \ No newline at end of file
diff --git a/jb-ui/src/api_fsb/.gitignore b/jb-ui/src/api_fsb/.gitignore
new file mode 100644
index 0000000..149b576
--- /dev/null
+++ b/jb-ui/src/api_fsb/.gitignore
@@ -0,0 +1,4 @@
+wwwroot/*.js
+node_modules
+typings
+dist
diff --git a/jb-ui/src/api_fsb/.npmignore b/jb-ui/src/api_fsb/.npmignore
new file mode 100644
index 0000000..999d88d
--- /dev/null
+++ b/jb-ui/src/api_fsb/.npmignore
@@ -0,0 +1 @@
+# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm \ No newline at end of file
diff --git a/jb-ui/src/api_fsb/.openapi-generator-ignore b/jb-ui/src/api_fsb/.openapi-generator-ignore
new file mode 100644
index 0000000..7484ee5
--- /dev/null
+++ b/jb-ui/src/api_fsb/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/jb-ui/src/api_fsb/.openapi-generator/FILES b/jb-ui/src/api_fsb/.openapi-generator/FILES
new file mode 100644
index 0000000..d76611f
--- /dev/null
+++ b/jb-ui/src/api_fsb/.openapi-generator/FILES
@@ -0,0 +1,255 @@
+.gitignore
+.npmignore
+api.ts
+base.ts
+common.ts
+configuration.ts
+docs/AccountType.md
+docs/AdjustedAfter.md
+docs/AdjustedBefore.md
+docs/AdjustedTimestamp.md
+docs/AdjustmentType.md
+docs/AggregateBySource.md
+docs/AmtCashoutMethodData.md
+docs/AuditLog.md
+docs/AuditLogLevel.md
+docs/Body.md
+docs/BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost.md
+docs/BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost.md
+docs/BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost.md
+docs/BrokerageProductPayoutEvent.md
+docs/BucketTask.md
+docs/BuyerId.md
+docs/Cardinality.md
+docs/CashMailCashoutMethodData.md
+docs/CashMailOrderData.md
+docs/CashoutMethodForeignValue.md
+docs/CashoutMethodForeignValueResponse.md
+docs/CashoutMethodOut.md
+docs/CashoutMethodResponse.md
+docs/CashoutMethodsResponse.md
+docs/CashoutRequestInfo.md
+docs/CashoutRequestResponse.md
+docs/Category.md
+docs/CategoryAssociation.md
+docs/ContestApi.md
+docs/ContestEndCondition.md
+docs/ContestEndConditionTargetEntryAmount.md
+docs/ContestEndReason.md
+docs/ContestEntryRule.md
+docs/ContestEntryTrigger.md
+docs/ContestPrize.md
+docs/ContestPrizeKind.md
+docs/ContestStatus.md
+docs/ContestWinner.md
+docs/CountStat.md
+docs/CreateCashMailCashoutMethodRequest.md
+docs/CreateCashoutRequest.md
+docs/CreatePayPalCashoutMethodRequest.md
+docs/Currency.md
+docs/CurrentAmount.md
+docs/DashboardApi.md
+docs/Data.md
+docs/DeliveryStatus.md
+docs/Direction.md
+docs/DurationSummary.md
+docs/EventEnvelope.md
+docs/EventMessage.md
+docs/EventType.md
+docs/ExtStatusCode1.md
+docs/ExtStatusCode2.md
+docs/ExtStatusCode3.md
+docs/FacetValue.md
+docs/Finished.md
+docs/GeoIPInformation.md
+docs/HTTPValidationError.md
+docs/IntegrationMode.md
+docs/Leaderboard.md
+docs/LeaderboardApi.md
+docs/LeaderboardCode.md
+docs/LeaderboardContestUserView.md
+docs/LeaderboardFrequency.md
+docs/LeaderboardResponse.md
+docs/LeaderboardRow.md
+docs/LeaderboardWinner.md
+docs/LeaderboardWinnerResponse.md
+docs/LedgerAccount.md
+docs/LedgerEntry.md
+docs/LedgerTransaction.md
+docs/ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner.md
+docs/MarketProfileKnowledge.md
+docs/MarketplaceBucket.md
+docs/MarketplaceInventorySummary.md
+docs/MarketplaceOfferwall.md
+docs/MarketplaceOfferwallResponse.md
+docs/MarketplaceSummary.md
+docs/MaxEntryAmountPerUser.md
+docs/MaxGaugeBySource.md
+docs/MilestoneContestEndCondition.md
+docs/MilestoneUserView.md
+docs/OfferWallCategoryRequest.md
+docs/OfferWallInfo.md
+docs/OfferWallRequestYieldmanParams.md
+docs/OfferwallApi.md
+docs/OfferwallReason.md
+docs/OneShotOfferwall.md
+docs/OneShotOfferwallBucket.md
+docs/OneShotOfferwallResponse.md
+docs/OrderData.md
+docs/POPFinancial.md
+docs/PatternValidation.md
+docs/Payload.md
+docs/PayoutConfig.md
+docs/PayoutStatus.md
+docs/PayoutSummary.md
+docs/PayoutTransformation.md
+docs/PayoutTransformationPercentArgs.md
+docs/PayoutType.md
+docs/PaypalCashoutMethodData.md
+docs/PingMessage.md
+docs/PongMessage.md
+docs/Product.md
+docs/ProductBalances.md
+docs/ProductUserApi.md
+docs/ProfilingConfig.md
+docs/ProfilingInfoResponse.md
+docs/ProfilingQuestionsApi.md
+docs/PropertyType.md
+docs/RaffleUserView.md
+docs/RedemptionCurrency.md
+docs/ReportApi.md
+docs/ReportNotes.md
+docs/ReportTask.md
+docs/ReportValue.md
+docs/ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet.md
+docs/ResponseWebsocketEventsDocsWsEventsDocsGet.md
+docs/Scope.md
+docs/Selector.md
+docs/SessionAdjustedStatus.md
+docs/SessionConfig.md
+docs/SessionEnterPayload.md
+docs/SessionFinishPayload.md
+docs/SessionStatusCode2.md
+docs/ShippingCarrier.md
+docs/ShippingMethod.md
+docs/SingleEntryBucket.md
+docs/SingleEntryOfferWall.md
+docs/SingleEntryOfferWallResponse.md
+docs/SoftPairBucket.md
+docs/SoftPairOfferwall.md
+docs/SoftPairOfferwallResponse.md
+docs/Source.md
+docs/SourceConfig.md
+docs/SourcesConfig.md
+docs/StartedAfter.md
+docs/StartedBefore.md
+docs/StarwallOfferWall.md
+docs/StarwallOfferWallResponse.md
+docs/StarwallPlusBlockOfferWall.md
+docs/StarwallPlusBlockOfferWallResponse.md
+docs/StarwallPlusBlockRecontactOfferWall.md
+docs/StarwallPlusBlockRecontactOfferWallResponse.md
+docs/StarwallPlusOfferWall.md
+docs/StarwallPlusOfferWallResponse.md
+docs/StatisticalSummaryStat.md
+docs/StatisticalSummaryValue.md
+docs/StatsMessage.md
+docs/StatsSnapshot.md
+docs/Status.md
+docs/StatusApi.md
+docs/StatusCode1.md
+docs/StatusInfoResponseFail.md
+docs/StatusResponse.md
+docs/StatusResponseFailure.md
+docs/StatusSuccessFail.md
+docs/StreakFulfillment.md
+docs/StreakPeriod.md
+docs/StreakState.md
+docs/StreamsApi.md
+docs/SubscribeMessage.md
+docs/SupplierTag.md
+docs/SupplyConfig.md
+docs/SupplyPolicy.md
+docs/SurveyEligibilityCriterion.md
+docs/SurveyId.md
+docs/TangoCashoutMethodData.md
+docs/TaskEnterPayload.md
+docs/TaskFinishPayload.md
+docs/TaskStatusResponse.md
+docs/TasksStatusResponse.md
+docs/TopNBucket.md
+docs/TopNOfferWall.md
+docs/TopNOfferWallResponse.md
+docs/TopNPlusBlockOfferWall.md
+docs/TopNPlusBlockOfferWallResponse.md
+docs/TopNPlusBlockRecontactOfferWall.md
+docs/TopNPlusBlockRecontactOfferWallResponse.md
+docs/TopNPlusBucket.md
+docs/TopNPlusOfferWall.md
+docs/TopNPlusOfferWallResponse.md
+docs/TopNPlusRecontactBucket.md
+docs/UPKImportance.md
+docs/USDeliveryAddress.md
+docs/UpkItem.md
+docs/UpkProperty.md
+docs/UpkQuestion.md
+docs/UpkQuestionChoice.md
+docs/UpkQuestionChoiceOut.md
+docs/UpkQuestionConfiguration.md
+docs/UpkQuestionConfigurationMC.md
+docs/UpkQuestionConfigurationSLIDER.md
+docs/UpkQuestionConfigurationTE.md
+docs/UpkQuestionOut.md
+docs/UpkQuestionResponse.md
+docs/UpkQuestionSelectorHIDDEN.md
+docs/UpkQuestionSelectorMC.md
+docs/UpkQuestionSelectorSLIDER.md
+docs/UpkQuestionSelectorTE.md
+docs/UpkQuestionType.md
+docs/UpkQuestionValidation.md
+docs/Uri.md
+docs/User.md
+docs/UserAmount.md
+docs/UserAmountToday.md
+docs/UserCpiString.md
+docs/UserCreateConfig.md
+docs/UserHealthConfig.md
+docs/UserInfo.md
+docs/UserInfoResponse.md
+docs/UserLedgerTransactionTaskAdjustment.md
+docs/UserLedgerTransactionTaskComplete.md
+docs/UserLedgerTransactionTypeSummary.md
+docs/UserLedgerTransactionTypesSummary.md
+docs/UserLedgerTransactionUserBonus.md
+docs/UserLedgerTransactionUserPayout.md
+docs/UserLedgerTransactionsResponse.md
+docs/UserLedgerTransactionsResponseTransactionsInner.md
+docs/UserProfile.md
+docs/UserProfileKnowledge.md
+docs/UserProfileKnowledgeAnswer.md
+docs/UserProfileResponse.md
+docs/UserProfileUpdateRequest.md
+docs/UserProfilesResponse.md
+docs/UserQuestionAnswerIn.md
+docs/UserStreak.md
+docs/UserType.md
+docs/UserWalletBalance.md
+docs/UserWalletBalanceResponse.md
+docs/UserWalletConfig.md
+docs/ValidationError.md
+docs/ValidationErrorLocInner.md
+docs/WXETOfferwall.md
+docs/WXETOfferwallBucket.md
+docs/WXETOfferwallResponse.md
+docs/WallAdjustedStatus.md
+docs/WallOut.md
+docs/WallOutAdjustedStatus.md
+docs/WallOutReportValue.md
+docs/WallOutStatus.md
+docs/WallOutStatusCode1.md
+docs/WallOutStatusCode2.md
+docs/WallStatusCode2.md
+docs/WalletApi.md
+docs/YieldManConfig.md
+git_push.sh
+index.ts
diff --git a/jb-ui/src/api_fsb/.openapi-generator/VERSION b/jb-ui/src/api_fsb/.openapi-generator/VERSION
new file mode 100644
index 0000000..e465da4
--- /dev/null
+++ b/jb-ui/src/api_fsb/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.14.0
diff --git a/jb-ui/src/api_fsb/README.md b/jb-ui/src/api_fsb/README.md
new file mode 100644
index 0000000..fa7c8a6
--- /dev/null
+++ b/jb-ui/src/api_fsb/README.md
@@ -0,0 +1,11 @@
+# Panel UI OpenAPI Definitions
+
+```bash
+apt install default-jdk
+java -version
+
+npm install -g @openapitools/openapi-generator-cli
+
+wget https://fsb.generalresearch.com/openapi.json
+openapi-generator-cli generate -i ./openapi.json -g typescript-axios -o ./
+``` \ No newline at end of file
diff --git a/jb-ui/src/api_fsb/api.ts b/jb-ui/src/api_fsb/api.ts
new file mode 100644
index 0000000..6d0acea
--- /dev/null
+++ b/jb-ui/src/api_fsb/api.ts
@@ -0,0 +1,13874 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * General Research Full Service Brokerage API
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.2.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+import type { Configuration } from './configuration';
+import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
+import globalAxios from 'axios';
+// Some imports not used depending on template conditions
+// @ts-ignore
+import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common';
+import type { RequestArgs } from './base';
+// @ts-ignore
+import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base';
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const AccountType = {
+ BpCommission: 'bp_commission',
+ BpWallet: 'bp_wallet',
+ UserWallet: 'user_wallet',
+ Cash: 'cash',
+ Revenue: 'revenue',
+ Expense: 'expense',
+ ContestWallet: 'contest_wallet',
+ CreditLine: 'credit_line',
+ WaWallet: 'wa_wallet',
+ WaBudgetPool: 'wa_budget_pool',
+ WaHeld: 'wa_held',
+ WaCreditLine: 'wa_credit_line'
+} as const;
+
+export type AccountType = typeof AccountType[keyof typeof AccountType];
+
+
+/**
+ * Retrieve sessions which were adjusted after this timestamp.
+ * @export
+ * @interface AdjustedAfter
+ */
+export interface AdjustedAfter {
+}
+/**
+ * Retrieve sessions which were adjusted before this timestamp. Default is now.
+ * @export
+ * @interface AdjustedBefore
+ */
+export interface AdjustedBefore {
+}
+/**
+ *
+ * @export
+ * @interface AdjustedTimestamp
+ */
+export interface AdjustedTimestamp {
+}
+/**
+ *
+ * @export
+ * @interface AdjustmentType
+ */
+export interface AdjustmentType {
+ /**
+ * The total amount (in USD cents) that the Brokerage Producthas earned within a respective time period from a specificSource of Tasks.
+ * @type {number}
+ * @memberof AdjustmentType
+ */
+ 'amount': number;
+ /**
+ * - `ac` = ADJUSTED_TO_COMPLETE - `af` = ADJUSTED_TO_FAIL - `pa` = PAYOUT_ADJUSTMENT
+ * @type {SessionAdjustedStatus}
+ * @memberof AdjustmentType
+ */
+ 'adjustment': SessionAdjustedStatus;
+}
+
+
+/**
+ *
+ * @export
+ * @interface AggregateBySource
+ */
+export interface AggregateBySource {
+ /**
+ *
+ * @type {number}
+ * @memberof AggregateBySource
+ */
+ 'total'?: number;
+ /**
+ *
+ * @type {{ [key: string]: number; }}
+ * @memberof AggregateBySource
+ */
+ 'by_source'?: { [key: string]: number; };
+}
+/**
+ *
+ * @export
+ * @interface AmtCashoutMethodData
+ */
+export interface AmtCashoutMethodData {
+ /**
+ *
+ * @type {string}
+ * @memberof AmtCashoutMethodData
+ */
+ 'type'?: AmtCashoutMethodDataTypeEnum;
+}
+
+export const AmtCashoutMethodDataTypeEnum = {
+ Amt: 'AMT'
+} as const;
+
+export type AmtCashoutMethodDataTypeEnum = typeof AmtCashoutMethodDataTypeEnum[keyof typeof AmtCashoutMethodDataTypeEnum];
+
+/**
+ * Table / Model for logging \"actions\" taken by a user or \"events\" that are related to a User
+ * @export
+ * @interface AuditLog
+ */
+export interface AuditLog {
+ /**
+ *
+ * @type {number}
+ * @memberof AuditLog
+ */
+ 'id'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof AuditLog
+ */
+ 'user_id': number;
+ /**
+ * When did this event occur
+ * @type {string}
+ * @memberof AuditLog
+ */
+ 'created'?: string;
+ /**
+ * The level of importance for this event. Works the same as python logging levels. It is an integer 0 - 50, and implementers of this field could map it to the predefined levels: (`CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG`).This is NOT the same concept as the \'strength\' of whatever event happened; it is just for sorting, filtering and display purposes. For e.g. multiple level 20 events != the \'importance\' of one level 40 event.
+ * @type {AuditLogLevel}
+ * @memberof AuditLog
+ */
+ 'level': AuditLogLevel;
+ /**
+ *
+ * @type {string}
+ * @memberof AuditLog
+ */
+ 'event_type': string;
+ /**
+ *
+ * @type {string}
+ * @memberof AuditLog
+ */
+ 'event_msg'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof AuditLog
+ */
+ 'event_value'?: number | null;
+}
+
+
+/**
+ *
+ * @export
+ * @enum {number}
+ */
+
+export const AuditLogLevel = {
+ NUMBER_50: 50,
+ NUMBER_502: 50,
+ NUMBER_40: 40,
+ NUMBER_30: 30,
+ NUMBER_302: 30,
+ NUMBER_20: 20,
+ NUMBER_10: 10,
+ NUMBER_0: 0
+} as const;
+
+export type AuditLogLevel = typeof AuditLogLevel[keyof typeof AuditLogLevel];
+
+
+/**
+ * @type Body
+ * @export
+ */
+export type Body = { type: 'CASH_IN_MAIL' } & CreateCashMailCashoutMethodRequest | { type: 'PAYPAL' } & CreatePayPalCashoutMethodRequest;
+
+/**
+ *
+ * @export
+ * @interface BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+ */
+export interface BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost {
+ /**
+ *
+ * @type {Array<UserQuestionAnswerIn>}
+ * @memberof BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+ */
+ 'answers': Array<UserQuestionAnswerIn>;
+}
+/**
+ *
+ * @export
+ * @interface BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+ */
+export interface BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost {
+ /**
+ *
+ * @type {Array<UserQuestionAnswerIn>}
+ * @memberof BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+ */
+ 'answers': Array<UserQuestionAnswerIn>;
+}
+/**
+ *
+ * @export
+ * @interface BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+ */
+export interface BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost {
+ /**
+ *
+ * @type {Array<UserQuestionAnswerIn>}
+ * @memberof BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+ */
+ 'answers': Array<UserQuestionAnswerIn>;
+}
+/**
+ * The amount - created: When the Brokerage Product was paid out
+ * @export
+ * @interface BrokerageProductPayoutEvent
+ */
+export interface BrokerageProductPayoutEvent {
+ /**
+ *
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'uuid'?: string;
+ /**
+ * The LedgerAccount.uuid that money is being requested from. Thie User or Brokerage Product is retrievable through the LedgerAccount.reference_uuid
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'debit_account_uuid': string;
+ /**
+ * References a row in the account_cashoutmethod table. This is the cashout method that was used to request this payout. (A cashout is the same thing as a payout)
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'cashout_method_uuid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'created'?: string;
+ /**
+ * The USDCent amount int. This cannot be 0 or negative
+ * @type {number}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'amount': number;
+ /**
+ *
+ * @type {PayoutStatus}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'status'?: PayoutStatus | null;
+ /**
+ *
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'ext_ref_id'?: string | null;
+ /**
+ * - `PAYPAL` = PAYPAL - `TANGO` = TANGO - `DWOLLA` = DWOLLA - `ACH` = ACH - `WIRE` = WIRE - `CASH_IN_MAIL` = CASH_IN_MAIL - `PRIZE` = PRIZE - `AMT` = AMT - `AMT_BONUS` = AMT_BONUS - `AMT_ASSIGNMENT` = AMT_HIT
+ * @type {PayoutType}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'payout_type': PayoutType;
+ /**
+ * Stores payout-type-specific information that is used to request this payout from the external provider.
+ * @type {object}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'request_data'?: object;
+ /**
+ *
+ * @type {OrderData}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'order_data'?: OrderData | null;
+ /**
+ * The Brokerage Product that was paid out
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'product_id': string;
+ /**
+ * - `PAYPAL` = PAYPAL - `TANGO` = TANGO - `DWOLLA` = DWOLLA - `ACH` = ACH - `WIRE` = WIRE - `CASH_IN_MAIL` = CASH_IN_MAIL - `PRIZE` = PRIZE - `AMT` = AMT - `AMT_BONUS` = AMT_BONUS - `AMT_ASSIGNMENT` = AMT_HIT
+ * @type {PayoutType}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'method': PayoutType;
+ /**
+ *
+ * @type {number}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'amount_usd': number;
+ /**
+ *
+ * @type {string}
+ * @memberof BrokerageProductPayoutEvent
+ */
+ 'amount_usd_str': string;
+}
+
+
+/**
+ * This represents one of the \"tasks\" within a bucket\'s ordered list of tasks.
+ * @export
+ * @interface BucketTask
+ */
+export interface BucketTask {
+ /**
+ * The internal task id for this task within the marketplace
+ * @type {string}
+ * @memberof BucketTask
+ */
+ 'id': string;
+ /**
+ * The namespaced task id for this task within the marketplace
+ * @type {string}
+ * @memberof BucketTask
+ */
+ 'id_code': string;
+ /**
+ *
+ * @type {Source}
+ * @memberof BucketTask
+ */
+ 'source': Source;
+ /**
+ * expected loi in seconds
+ * @type {number}
+ * @memberof BucketTask
+ */
+ 'loi': number;
+ /**
+ * integer cents
+ * @type {number}
+ * @memberof BucketTask
+ */
+ 'payout': number;
+}
+
+
+/**
+ *
+ * @export
+ * @interface BuyerId
+ */
+export interface BuyerId {
+}
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const Cardinality = {
+ Star: '*',
+ QuestionMark: '?'
+} as const;
+
+export type Cardinality = typeof Cardinality[keyof typeof Cardinality];
+
+
+/**
+ *
+ * @export
+ * @interface CashMailCashoutMethodData
+ */
+export interface CashMailCashoutMethodData {
+ /**
+ *
+ * @type {string}
+ * @memberof CashMailCashoutMethodData
+ */
+ 'type'?: CashMailCashoutMethodDataTypeEnum;
+ /**
+ * Delivery address where payment should be sent
+ * @type {USDeliveryAddress}
+ * @memberof CashMailCashoutMethodData
+ */
+ 'delivery_address': USDeliveryAddress;
+}
+
+export const CashMailCashoutMethodDataTypeEnum = {
+ CashInMail: 'CASH_IN_MAIL'
+} as const;
+
+export type CashMailCashoutMethodDataTypeEnum = typeof CashMailCashoutMethodDataTypeEnum[keyof typeof CashMailCashoutMethodDataTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface CashMailOrderData
+ */
+export interface CashMailOrderData {
+ /**
+ *
+ * @type {string}
+ * @memberof CashMailOrderData
+ */
+ 'type'?: CashMailOrderDataTypeEnum;
+ /**
+ *
+ * @type {number}
+ * @memberof CashMailOrderData
+ */
+ 'shipping_cost': number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CashMailOrderData
+ */
+ 'tracking_number'?: string | null;
+ /**
+ *
+ * @type {ShippingMethod}
+ * @memberof CashMailOrderData
+ */
+ 'shipping_method'?: ShippingMethod | null;
+ /**
+ *
+ * @type {ShippingCarrier}
+ * @memberof CashMailOrderData
+ */
+ 'carrier'?: ShippingCarrier | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CashMailOrderData
+ */
+ 'ship_date'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CashMailOrderData
+ */
+ 'estimated_delivery_date'?: string | null;
+ /**
+ *
+ * @type {DeliveryStatus}
+ * @memberof CashMailOrderData
+ */
+ 'delivery_status'?: DeliveryStatus | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CashMailOrderData
+ */
+ 'last_updated'?: string | null;
+}
+
+export const CashMailOrderDataTypeEnum = {
+ CashInMail: 'CASH_IN_MAIL'
+} as const;
+
+export type CashMailOrderDataTypeEnum = typeof CashMailOrderDataTypeEnum[keyof typeof CashMailOrderDataTypeEnum];
+
+/**
+ * Shows the expected value of a redemption in a foreign currency.
+ * @export
+ * @interface CashoutMethodForeignValue
+ */
+export interface CashoutMethodForeignValue {
+ /**
+ * Value of the redemption in the currency\'s smallest unit.
+ * @type {number}
+ * @memberof CashoutMethodForeignValue
+ */
+ 'value': number;
+ /**
+ * Supported Currencies for Foreign Redemptions Allowed values: - __USD__ *(USD)*: US Dollars. Smallest Unit: Cents. - __CAD__ *(CAD)*: Canadian Dollars. Smallest Unit: Cents. - __GBP__ *(GBP)*: British Pounds. Smallest Unit: Pence. - __EUR__ *(EUR)*: Euros. Smallest Unit: Cents. - __INR__ *(INR)*: Indian Rupees. Smallest Unit: Paise. - __AUD__ *(AUD)*: Australian Dollars. Smallest Unit: Cents. - __PLN__ *(PLN)*: Polish Zloty. Smallest Unit: Grosz. - __SEK__ *(SEK)*: Swedish Krona. Smallest Unit: Öre. - __SGD__ *(SGD)*: Singapore Dollars. Smallest Unit: Cents. - __MXN__ *(MXN)*: Mexican Pesos. Smallest Unit: Centavos.
+ * @type {RedemptionCurrency}
+ * @memberof CashoutMethodForeignValue
+ */
+ 'currency': RedemptionCurrency;
+ /**
+ * A string representation of the value in the currency.
+ * @type {string}
+ * @memberof CashoutMethodForeignValue
+ */
+ 'value_string': string;
+}
+
+
+/**
+ *
+ * @export
+ * @interface CashoutMethodForeignValueResponse
+ */
+export interface CashoutMethodForeignValueResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof CashoutMethodForeignValueResponse
+ */
+ 'status': CashoutMethodForeignValueResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodForeignValueResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {CashoutMethodForeignValue}
+ * @memberof CashoutMethodForeignValueResponse
+ */
+ 'cashout_method_value': CashoutMethodForeignValue;
+}
+
+export const CashoutMethodForeignValueResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type CashoutMethodForeignValueResponseStatusEnum = typeof CashoutMethodForeignValueResponseStatusEnum[keyof typeof CashoutMethodForeignValueResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface CashoutMethodOut
+ */
+export interface CashoutMethodOut {
+ /**
+ * Unique ID for this cashout method
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'id': string;
+ /**
+ * The currency of the cashout. Only USD is supported.
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'currency'?: CashoutMethodOutCurrencyEnum;
+ /**
+ *
+ * @type {Currency}
+ * @memberof CashoutMethodOut
+ */
+ 'original_currency'?: Currency | null;
+ /**
+ *
+ * @type {Data}
+ * @memberof CashoutMethodOut
+ */
+ 'data': Data;
+ /**
+ * The description of the cashout method.
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'image_url'?: string | null;
+ /**
+ * (In lowest unit of the original_currency), The maximum amount that can be cashed out in one transaction.
+ * @type {number}
+ * @memberof CashoutMethodOut
+ */
+ 'max_value': number;
+ /**
+ * (In lowest unit of the original_currency), The minimum amount that can be cashed out in one transaction.
+ * @type {number}
+ * @memberof CashoutMethodOut
+ */
+ 'min_value': number;
+ /**
+ * A descriptive name for the cashout method.
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'name': string;
+ /**
+ * The method in which the requested payout is delivered. Allowed values: - __PAYPAL__ *(PAYPAL)*: User is paid out to their personal PayPal email address - __TANGO__ *(TANGO)*: User is paid uut via a Tango Gift Card - __DWOLLA__ *(DWOLLA)*: DWOLLA - __ACH__ *(ACH)*: A payment is made to a bank account using ACH - __WIRE__ *(WIRE)*: A payment is made to a bank account using ACH - __CASH_IN_MAIL__ *(CASH_IN_MAIL)*: A payment is made in cash and mailed to the user. - __PRIZE__ *(PRIZE)*: A payment is made as a prize with some monetary value - __AMT__ *(AMT)*: This is used to designate either AMT_BONUS or AMT_HIT - __AMT_BONUS__ *(AMT_BONUS)*: Amazon Mechanical Turk as a Bonus - __AMT_ASSIGNMENT__ *(AMT_HIT)*: Amazon Mechanical Turk for a HIT
+ * @type {PayoutType}
+ * @memberof CashoutMethodOut
+ */
+ 'type': PayoutType;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'ext_id'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof CashoutMethodOut
+ */
+ 'usd_exchange_rate'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof CashoutMethodOut
+ */
+ 'max_value_usd'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof CashoutMethodOut
+ */
+ 'min_value_usd'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'product_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodOut
+ */
+ 'product_user_id'?: string | null;
+}
+
+export const CashoutMethodOutCurrencyEnum = {
+ Usd: 'USD'
+} as const;
+
+export type CashoutMethodOutCurrencyEnum = typeof CashoutMethodOutCurrencyEnum[keyof typeof CashoutMethodOutCurrencyEnum];
+
+/**
+ *
+ * @export
+ * @interface CashoutMethodResponse
+ */
+export interface CashoutMethodResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof CashoutMethodResponse
+ */
+ 'status': CashoutMethodResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {CashoutMethodOut}
+ * @memberof CashoutMethodResponse
+ */
+ 'cashout_method': CashoutMethodOut;
+}
+
+export const CashoutMethodResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type CashoutMethodResponseStatusEnum = typeof CashoutMethodResponseStatusEnum[keyof typeof CashoutMethodResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface CashoutMethodsResponse
+ */
+export interface CashoutMethodsResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof CashoutMethodsResponse
+ */
+ 'status': CashoutMethodsResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutMethodsResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {Array<CashoutMethodOut>}
+ * @memberof CashoutMethodsResponse
+ */
+ 'cashout_methods': Array<CashoutMethodOut>;
+}
+
+export const CashoutMethodsResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type CashoutMethodsResponseStatusEnum = typeof CashoutMethodsResponseStatusEnum[keyof typeof CashoutMethodsResponseStatusEnum];
+
+/**
+ * See models.thl.payout: PayoutEvent. We\'ve confused a CashOut and a Payout. This is used only in the API response.
+ * @export
+ * @interface CashoutRequestInfo
+ */
+export interface CashoutRequestInfo {
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutRequestInfo
+ */
+ 'id': string | null;
+ /**
+ * This is the name of the cashout method.
+ * @type {string}
+ * @memberof CashoutRequestInfo
+ */
+ 'description': string;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutRequestInfo
+ */
+ 'message'?: string | null;
+ /**
+ *
+ * @type {PayoutStatus}
+ * @memberof CashoutRequestInfo
+ */
+ 'status'?: PayoutStatus | null;
+ /**
+ *
+ * @type {object}
+ * @memberof CashoutRequestInfo
+ */
+ 'transaction_info'?: object | null;
+}
+
+
+/**
+ *
+ * @export
+ * @interface CashoutRequestResponse
+ */
+export interface CashoutRequestResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof CashoutRequestResponse
+ */
+ 'status': CashoutRequestResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof CashoutRequestResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {CashoutRequestInfo}
+ * @memberof CashoutRequestResponse
+ */
+ 'cashout': CashoutRequestInfo;
+}
+
+export const CashoutRequestResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type CashoutRequestResponseStatusEnum = typeof CashoutRequestResponseStatusEnum[keyof typeof CashoutRequestResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface Category
+ */
+export interface Category {
+ /**
+ *
+ * @type {string}
+ * @memberof Category
+ */
+ 'uuid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof Category
+ */
+ 'adwords_vertical_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof Category
+ */
+ 'label': string;
+ /**
+ *
+ * @type {string}
+ * @memberof Category
+ */
+ 'path': string;
+ /**
+ *
+ * @type {string}
+ * @memberof Category
+ */
+ 'parent_uuid'?: string | null;
+}
+/**
+ * Used in an offerwall. Stores the association between a category and a bucket, with a score.
+ * @export
+ * @interface CategoryAssociation
+ */
+export interface CategoryAssociation {
+ /**
+ * The category ID
+ * @type {string}
+ * @memberof CategoryAssociation
+ */
+ 'id': string;
+ /**
+ * The category label
+ * @type {string}
+ * @memberof CategoryAssociation
+ */
+ 'label': string;
+ /**
+ *
+ * @type {string}
+ * @memberof CategoryAssociation
+ */
+ 'adwords_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof CategoryAssociation
+ */
+ 'adwords_label'?: string | null;
+ /**
+ * The strength of the association of this bucketwith this category. Will sum to 1 within a bucket.
+ * @type {number}
+ * @memberof CategoryAssociation
+ */
+ 'p': number;
+}
+/**
+ * Defines the conditions to evaluate to determine when the contest is over. Multiple conditions can be set. The contest is over once ANY conditions are met.
+ * @export
+ * @interface ContestEndCondition
+ */
+export interface ContestEndCondition {
+ /**
+ *
+ * @type {ContestEndConditionTargetEntryAmount}
+ * @memberof ContestEndCondition
+ */
+ 'target_entry_amount'?: ContestEndConditionTargetEntryAmount | null;
+ /**
+ *
+ * @type {string}
+ * @memberof ContestEndCondition
+ */
+ 'ends_at'?: string | null;
+}
+/**
+ *
+ * @export
+ * @interface ContestEndConditionTargetEntryAmount
+ */
+export interface ContestEndConditionTargetEntryAmount {
+}
+/**
+ * Defines why a contest ended
+ * @export
+ * @enum {string}
+ */
+
+export const ContestEndReason = {
+ Cancelled: 'cancelled',
+ TargetEntryAmount: 'target_entry_amount',
+ EndsAt: 'ends_at',
+ MaxWinners: 'max_winners'
+} as const;
+
+export type ContestEndReason = typeof ContestEndReason[keyof typeof ContestEndReason];
+
+
+/**
+ * Defines rules the user must meet to be allowed to enter this contest Only applies if the ContestType is ENTRY!
+ * @export
+ * @interface ContestEntryRule
+ */
+export interface ContestEntryRule {
+ /**
+ *
+ * @type {MaxEntryAmountPerUser}
+ * @memberof ContestEntryRule
+ */
+ 'max_entry_amount_per_user'?: MaxEntryAmountPerUser | null;
+ /**
+ *
+ * @type {number}
+ * @memberof ContestEntryRule
+ */
+ 'max_daily_entries_per_user'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof ContestEntryRule
+ */
+ 'min_completes'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof ContestEntryRule
+ */
+ 'min_membership_level'?: number | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof ContestEntryRule
+ */
+ 'id_verified'?: boolean | null;
+}
+/**
+ * Defines what action/event triggers a (possible) entry into the contest (automatically). This only is valid on milestone contests
+ * @export
+ * @enum {string}
+ */
+
+export const ContestEntryTrigger = {
+ TaskComplete: 'task_complete',
+ TaskAttempt: 'task_attempt',
+ Referral: 'referral'
+} as const;
+
+export type ContestEntryTrigger = typeof ContestEntryTrigger[keyof typeof ContestEntryTrigger];
+
+
+/**
+ *
+ * @export
+ * @interface ContestPrize
+ */
+export interface ContestPrize {
+ /**
+ * Allowed values: - __physical__ *(PHYSICAL)*: A physical prize (e.g. a iPhone, cash in the mail, dinner with Max) - __promotion__ *(PROMOTION)*: A promotion is a temporary or special offer that provides extra value or benefits (e.g. 20% bonus on completes for the next 7 days) - __cash__ *(CASH)*: Money is deposited into user\'s virtual wallet
+ * @type {ContestPrizeKind}
+ * @memberof ContestPrize
+ */
+ 'kind': ContestPrizeKind;
+ /**
+ *
+ * @type {string}
+ * @memberof ContestPrize
+ */
+ 'name'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof ContestPrize
+ */
+ 'description'?: string | null;
+ /**
+ * Estimated cash value of prize in USDCents
+ * @type {number}
+ * @memberof ContestPrize
+ */
+ 'estimated_cash_value': number;
+ /**
+ *
+ * @type {number}
+ * @memberof ContestPrize
+ */
+ 'cash_amount'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof ContestPrize
+ */
+ 'promotion_id'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof ContestPrize
+ */
+ 'leaderboard_rank'?: number | null;
+}
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const ContestPrizeKind = {
+ Physical: 'physical',
+ Promotion: 'promotion',
+ Cash: 'cash'
+} as const;
+
+export type ContestPrizeKind = typeof ContestPrizeKind[keyof typeof ContestPrizeKind];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const ContestStatus = {
+ Active: 'active',
+ Completed: 'completed',
+ Cancelled: 'cancelled'
+} as const;
+
+export type ContestStatus = typeof ContestStatus[keyof typeof ContestStatus];
+
+
+/**
+ * In a Raffle, the ContestEntryType can be COUNT or CASH. In the CASH type, the unit of entry is 1 USDCent (one penny). Implicitly, each penny entered buys 1 entry into the raffle, and one entry is randomly selected for each prize. A contest should have as many winners as there are prizes special case 1: there are fewer entries than prizes special case 2: leaderboard contest with ties
+ * @export
+ * @interface ContestWinner
+ */
+export interface ContestWinner {
+ /**
+ *
+ * @type {string}
+ * @memberof ContestWinner
+ */
+ 'uuid'?: string;
+ /**
+ * When this user won this prize
+ * @type {string}
+ * @memberof ContestWinner
+ */
+ 'created_at'?: string;
+ /**
+ *
+ * @type {ContestPrize}
+ * @memberof ContestWinner
+ */
+ 'prize': ContestPrize;
+ /**
+ *
+ * @type {number}
+ * @memberof ContestWinner
+ */
+ 'awarded_cash_amount'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof ContestWinner
+ */
+ 'product_user_id': string | null;
+}
+/**
+ *
+ * @export
+ * @interface CountStat
+ */
+export interface CountStat {
+ /**
+ * The grouping criteria
+ * @type {{ [key: string]: FacetValue; }}
+ * @memberof CountStat
+ */
+ 'facet': { [key: string]: FacetValue; };
+ /**
+ * The count value for the given metric and facet
+ * @type {number}
+ * @memberof CountStat
+ */
+ 'count': number;
+}
+/**
+ *
+ * @export
+ * @interface CreateCashMailCashoutMethodRequest
+ */
+export interface CreateCashMailCashoutMethodRequest {
+ /**
+ * (product_user_id) The user to create this cashout method for.
+ * @type {string}
+ * @memberof CreateCashMailCashoutMethodRequest
+ */
+ 'bpuid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof CreateCashMailCashoutMethodRequest
+ */
+ 'type'?: CreateCashMailCashoutMethodRequestTypeEnum;
+ /**
+ * Delivery address where payment should be sent
+ * @type {USDeliveryAddress}
+ * @memberof CreateCashMailCashoutMethodRequest
+ */
+ 'delivery_address': USDeliveryAddress;
+}
+
+export const CreateCashMailCashoutMethodRequestTypeEnum = {
+ CashInMail: 'CASH_IN_MAIL'
+} as const;
+
+export type CreateCashMailCashoutMethodRequestTypeEnum = typeof CreateCashMailCashoutMethodRequestTypeEnum[keyof typeof CreateCashMailCashoutMethodRequestTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface CreateCashoutRequest
+ */
+export interface CreateCashoutRequest {
+ /**
+ * (product_user_id) The user requesting a cashout.
+ * @type {string}
+ * @memberof CreateCashoutRequest
+ */
+ 'bpuid': string;
+ /**
+ * (USD cents) The amount requested for the cashout.
+ * @type {number}
+ * @memberof CreateCashoutRequest
+ */
+ 'amount': number;
+ /**
+ * Unique ID for the cashout method the cashout is being requested with.
+ * @type {string}
+ * @memberof CreateCashoutRequest
+ */
+ 'cashout_method_id': string;
+}
+/**
+ *
+ * @export
+ * @interface CreatePayPalCashoutMethodRequest
+ */
+export interface CreatePayPalCashoutMethodRequest {
+ /**
+ * (product_user_id) The user to create this cashout method for.
+ * @type {string}
+ * @memberof CreatePayPalCashoutMethodRequest
+ */
+ 'bpuid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof CreatePayPalCashoutMethodRequest
+ */
+ 'type'?: CreatePayPalCashoutMethodRequestTypeEnum;
+ /**
+ * Email address of the paypal user
+ * @type {string}
+ * @memberof CreatePayPalCashoutMethodRequest
+ */
+ 'email': string;
+}
+
+export const CreatePayPalCashoutMethodRequestTypeEnum = {
+ Paypal: 'PAYPAL'
+} as const;
+
+export type CreatePayPalCashoutMethodRequestTypeEnum = typeof CreatePayPalCashoutMethodRequestTypeEnum[keyof typeof CreatePayPalCashoutMethodRequestTypeEnum];
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const Currency = {
+ Usd: 'USD',
+ Cad: 'CAD',
+ Gbp: 'GBP',
+ Eur: 'EUR',
+ Inr: 'INR',
+ Aud: 'AUD',
+ Pln: 'PLN',
+ Sek: 'SEK',
+ Sgd: 'SGD',
+ Mxn: 'MXN'
+} as const;
+
+export type Currency = typeof Currency[keyof typeof Currency];
+
+
+/**
+ * Sum of all entry amounts
+ * @export
+ * @interface CurrentAmount
+ */
+export interface CurrentAmount {
+}
+/**
+ * @type Data
+ * @export
+ */
+export type Data = { type: 'AMT' } & AmtCashoutMethodData | { type: 'CASH_IN_MAIL' } & CashMailCashoutMethodData | { type: 'PAYPAL' } & PaypalCashoutMethodData | { type: 'TANGO' } & TangoCashoutMethodData;
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const DeliveryStatus = {
+ Pending: 'Pending',
+ Shipped: 'Shipped',
+ InTransit: 'In Transit',
+ OutForDelivery: 'Out for Delivery',
+ Delivered: 'Delivered',
+ Returned: 'Returned',
+ Canceled: 'Canceled',
+ FailedAttempt: 'Failed Attempt',
+ Lost: 'Lost'
+} as const;
+
+export type DeliveryStatus = typeof DeliveryStatus[keyof typeof DeliveryStatus];
+
+
+/**
+ * Entries on the debit side will increase debit normal accounts, while entries on the credit side will decrease them. Conversely, entries on the credit side will increase credit normal accounts, while entries on the debit side will decrease them. By convention (?), the db will store transactions as debit-normal. For a credit-normal account, we should flip the signs.
+ * @export
+ * @enum {number}
+ */
+
+export const Direction = {
+ NUMBER_MINUS_1: -1,
+ NUMBER_1: 1
+} as const;
+
+export type Direction = typeof Direction[keyof typeof Direction];
+
+
+/**
+ * Durations are in integer seconds. Describes the statistical distribution of expected durations of tasks within this bucket.
+ * @export
+ * @interface DurationSummary
+ */
+export interface DurationSummary {
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'min': number;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'max': number;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'mean'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'q1': number;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'q2': number;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'q3': number;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'lower_whisker': number;
+ /**
+ *
+ * @type {number}
+ * @memberof DurationSummary
+ */
+ 'upper_whisker': number;
+}
+/**
+ *
+ * @export
+ * @interface EventEnvelope
+ */
+export interface EventEnvelope {
+ /**
+ *
+ * @type {string}
+ * @memberof EventEnvelope
+ */
+ 'event_uuid'?: string;
+ /**
+ *
+ * @type {EventType}
+ * @memberof EventEnvelope
+ */
+ 'event_type': EventType;
+ /**
+ *
+ * @type {string}
+ * @memberof EventEnvelope
+ */
+ 'timestamp'?: string;
+ /**
+ *
+ * @type {number}
+ * @memberof EventEnvelope
+ */
+ 'version'?: number;
+ /**
+ *
+ * @type {string}
+ * @memberof EventEnvelope
+ */
+ 'product_user_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof EventEnvelope
+ */
+ 'product_id': string;
+ /**
+ *
+ * @type {Payload}
+ * @memberof EventEnvelope
+ */
+ 'payload': Payload;
+}
+
+
+/**
+ *
+ * @export
+ * @interface EventMessage
+ */
+export interface EventMessage {
+ /**
+ *
+ * @type {string}
+ * @memberof EventMessage
+ */
+ 'kind'?: EventMessageKindEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof EventMessage
+ */
+ 'timestamp'?: string;
+ /**
+ *
+ * @type {EventEnvelope}
+ * @memberof EventMessage
+ */
+ 'data': EventEnvelope;
+}
+
+export const EventMessageKindEnum = {
+ Event: 'event'
+} as const;
+
+export type EventMessageKindEnum = typeof EventMessageKindEnum[keyof typeof EventMessageKindEnum];
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const EventType = {
+ TaskEnter: 'task.enter',
+ TaskFinish: 'task.finish',
+ SessionEnter: 'session.enter',
+ SessionFinish: 'session.finish',
+ WalletCredit: 'wallet.credit',
+ WalletDebit: 'wallet.debit',
+ UserCreated: 'user.created',
+ UserActive: 'user.active'
+} as const;
+
+export type EventType = typeof EventType[keyof typeof EventType];
+
+
+/**
+ *
+ * @export
+ * @interface ExtStatusCode1
+ */
+export interface ExtStatusCode1 {
+}
+/**
+ *
+ * @export
+ * @interface ExtStatusCode2
+ */
+export interface ExtStatusCode2 {
+}
+/**
+ *
+ * @export
+ * @interface ExtStatusCode3
+ */
+export interface ExtStatusCode3 {
+}
+/**
+ *
+ * @export
+ * @interface FacetValue
+ */
+export interface FacetValue {
+}
+/**
+ *
+ * @export
+ * @interface Finished
+ */
+export interface Finished {
+}
+/**
+ *
+ * @export
+ * @interface GeoIPInformation
+ */
+export interface GeoIPInformation {
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'geoname_id'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'continent_code'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'continent_name'?: string | null;
+ /**
+ * The ISO code of the country associated with the IP address.
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'country_name'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'subdivision_1_iso'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'subdivision_1_name'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'subdivision_2_iso'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'subdivision_2_name'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'city_name'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'metro_code'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'time_zone'?: string | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_in_european_union'?: boolean | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'updated'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'ip': string;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'registered_country_iso'?: string | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_anonymous'?: boolean | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_anonymous_vpn'?: boolean | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_hosting_provider'?: boolean | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_public_proxy'?: boolean | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_tor_exit_node'?: boolean | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof GeoIPInformation
+ */
+ 'is_residential_proxy'?: boolean | null;
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'autonomous_system_number'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'autonomous_system_organization'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'domain'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'isp'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'mobile_country_code'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'mobile_network_code'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'network'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'organization'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'static_ip_score'?: number | null;
+ /**
+ *
+ * @type {UserType}
+ * @memberof GeoIPInformation
+ */
+ 'user_type'?: UserType | null;
+ /**
+ *
+ * @type {string}
+ * @memberof GeoIPInformation
+ */
+ 'postal_code'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'latitude'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'longitude'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof GeoIPInformation
+ */
+ 'accuracy_radius'?: number | null;
+}
+
+
+/**
+ *
+ * @export
+ * @interface HTTPValidationError
+ */
+export interface HTTPValidationError {
+ /**
+ *
+ * @type {Array<ValidationError>}
+ * @memberof HTTPValidationError
+ */
+ 'detail'?: Array<ValidationError>;
+}
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const IntegrationMode = {
+ Platform: 'platform',
+ PassThrough: 'pass_through'
+} as const;
+
+export type IntegrationMode = typeof IntegrationMode[keyof typeof IntegrationMode];
+
+
+/**
+ * A leaderboard exists independently for each product_id in each country. Each country is associated with a single timezone. There is a daily, weekly, and monthly leaderboard.
+ * @export
+ * @interface Leaderboard
+ */
+export interface Leaderboard {
+ /**
+ * Unique ID for this leaderboard
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'id'?: string;
+ /**
+ * Descriptive name for the leaderboard based on the board_code
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'name'?: string;
+ /**
+ * The type of leaderboard. What the \"values\" represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @type {LeaderboardCode}
+ * @memberof Leaderboard
+ */
+ 'board_code': LeaderboardCode;
+ /**
+ * product_id
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'bpid': string;
+ /**
+ * The country this leaderboard is for.
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'country_iso': string;
+ /**
+ * The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @type {LeaderboardFrequency}
+ * @memberof Leaderboard
+ */
+ 'freq': LeaderboardFrequency;
+ /**
+ * The timezone for the requested country
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'timezone_name'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'sort_order'?: LeaderboardSortOrderEnum;
+ /**
+ * The total number of rows in the leaderboard.
+ * @type {number}
+ * @memberof Leaderboard
+ */
+ 'row_count': number;
+ /**
+ *
+ * @type {Array<LeaderboardRow>}
+ * @memberof Leaderboard
+ */
+ 'rows'?: Array<LeaderboardRow>;
+ /**
+ * The start of the time period covered by this board in local time, tz-aware
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'period_start_local': string;
+ /**
+ * The end of the time period covered by this board in local time, tz-aware
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'period_end_local'?: string;
+ /**
+ * (unix timestamp) The start time of the time range this leaderboard covers.
+ * @type {number}
+ * @memberof Leaderboard
+ */
+ 'start_timestamp': number;
+ /**
+ * (unix timestamp) The end time of the time range this leaderboard covers.
+ * @type {number}
+ * @memberof Leaderboard
+ */
+ 'end_timestamp': number;
+ /**
+ * The UTC offset for the timezone
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'utc_offset': string;
+ /**
+ * The start time of the time range this leaderboard covers (local time, in the leaderboard\'s timezone).
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'local_start_time': string;
+ /**
+ * The end time of the time range this leaderboard covers (local time, in the leaderboard\'s timezone).
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'local_end_time': string;
+ /**
+ * A formatted string for time period covered by this leaderboard. Can be used to display to users.
+ * @type {string}
+ * @memberof Leaderboard
+ */
+ 'start_end_str': string;
+}
+
+export const LeaderboardSortOrderEnum = {
+ Ascending: 'ascending',
+ Descending: 'descending'
+} as const;
+
+export type LeaderboardSortOrderEnum = typeof LeaderboardSortOrderEnum[keyof typeof LeaderboardSortOrderEnum];
+
+/**
+ * The type of leaderboard. What the \"values\" represent.
+ * @export
+ * @enum {string}
+ */
+
+export const LeaderboardCode = {
+ CompleteCount: 'complete_count',
+ LargestUserPayout: 'largest_user_payout',
+ SumUserPayout: 'sum_user_payout'
+} as const;
+
+export type LeaderboardCode = typeof LeaderboardCode[keyof typeof LeaderboardCode];
+
+
+/**
+ *
+ * @export
+ * @interface LeaderboardContestUserView
+ */
+export interface LeaderboardContestUserView {
+ /**
+ * Name of contest. Can be displayed to user.
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'name': string;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'description'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'contest_type'?: LeaderboardContestUserViewContestTypeEnum;
+ /**
+ *
+ * @type {ContestEndCondition}
+ * @memberof LeaderboardContestUserView
+ */
+ 'end_condition'?: ContestEndCondition;
+ /**
+ *
+ * @type {Array<ContestPrize>}
+ * @memberof LeaderboardContestUserView
+ */
+ 'prizes'?: Array<ContestPrize>;
+ /**
+ * When the contest starts
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'starts_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'terms_and_conditions'?: string | null;
+ /**
+ *
+ * @type {ContestStatus}
+ * @memberof LeaderboardContestUserView
+ */
+ 'status'?: ContestStatus;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'country_isos'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'uuid'?: string;
+ /**
+ * Contest applies only to a single BP
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'product_id': string;
+ /**
+ * When this contest was created
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'created_at'?: string;
+ /**
+ * When this contest was last modified. Does not include entries being created/modified
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'updated_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'ended_at'?: string | null;
+ /**
+ *
+ * @type {ContestEndReason}
+ * @memberof LeaderboardContestUserView
+ */
+ 'end_reason'?: ContestEndReason | null;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'product_user_id': string;
+ /**
+ * The prizes won in this contest by the requested user
+ * @type {Array<ContestWinner>}
+ * @memberof LeaderboardContestUserView
+ */
+ 'user_winnings'?: Array<ContestWinner>;
+ /**
+ * The specific leaderboard instance this contest is connected to
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'leaderboard_key': string;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'tie_break_strategy'?: LeaderboardContestUserViewTieBreakStrategyEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardContestUserView
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {number}
+ * @memberof LeaderboardContestUserView
+ */
+ 'user_rank': number | null;
+}
+
+export const LeaderboardContestUserViewContestTypeEnum = {
+ Leaderboard: 'leaderboard'
+} as const;
+
+export type LeaderboardContestUserViewContestTypeEnum = typeof LeaderboardContestUserViewContestTypeEnum[keyof typeof LeaderboardContestUserViewContestTypeEnum];
+export const LeaderboardContestUserViewTieBreakStrategyEnum = {
+ SplitPrizePool: 'split_prize_pool'
+} as const;
+
+export type LeaderboardContestUserViewTieBreakStrategyEnum = typeof LeaderboardContestUserViewTieBreakStrategyEnum[keyof typeof LeaderboardContestUserViewTieBreakStrategyEnum];
+
+/**
+ * The time period range for the leaderboard.
+ * @export
+ * @enum {string}
+ */
+
+export const LeaderboardFrequency = {
+ Daily: 'daily',
+ Weekly: 'weekly',
+ Monthly: 'monthly'
+} as const;
+
+export type LeaderboardFrequency = typeof LeaderboardFrequency[keyof typeof LeaderboardFrequency];
+
+
+/**
+ *
+ * @export
+ * @interface LeaderboardResponse
+ */
+export interface LeaderboardResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof LeaderboardResponse
+ */
+ 'status': LeaderboardResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {Leaderboard}
+ * @memberof LeaderboardResponse
+ */
+ 'leaderboard': Leaderboard;
+}
+
+export const LeaderboardResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type LeaderboardResponseStatusEnum = typeof LeaderboardResponseStatusEnum[keyof typeof LeaderboardResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface LeaderboardRow
+ */
+export interface LeaderboardRow {
+ /**
+ * product_user_id
+ * @type {string}
+ * @memberof LeaderboardRow
+ */
+ 'bpuid': string;
+ /**
+ * The numerical data ranks (1 through n) of the values. Ties are ranked using the lowest rank in the group.
+ * @type {number}
+ * @memberof LeaderboardRow
+ */
+ 'rank': number;
+ /**
+ * The value. The meaning of the value is dependent on the LeaderboardCode.
+ * @type {number}
+ * @memberof LeaderboardRow
+ */
+ 'value': number;
+}
+/**
+ *
+ * @export
+ * @interface LeaderboardWinner
+ */
+export interface LeaderboardWinner {
+ /**
+ * The user\'s final rank in the leaderboard
+ * @type {number}
+ * @memberof LeaderboardWinner
+ */
+ 'rank': number;
+ /**
+ * The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @type {LeaderboardFrequency}
+ * @memberof LeaderboardWinner
+ */
+ 'freq': LeaderboardFrequency;
+ /**
+ * The type of leaderboard. What the \"values\" represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @type {LeaderboardCode}
+ * @memberof LeaderboardWinner
+ */
+ 'board_code': LeaderboardCode;
+ /**
+ * The country this leaderboard is for.
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'country_iso': string;
+ /**
+ * When the prize was issued.
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'issued': string;
+ /**
+ * product_user_id
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'bpuid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'description': string;
+ /**
+ * (USD cents) The reward amount
+ * @type {number}
+ * @memberof LeaderboardWinner
+ */
+ 'amount': number;
+ /**
+ * The amount as a formatted string in USD. Can be displayed to the user.
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'amount_str': string;
+ /**
+ * When the leaderboard started
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'contest_start': string;
+ /**
+ * When the leaderboard ended
+ * @type {string}
+ * @memberof LeaderboardWinner
+ */
+ 'contest_end': string;
+}
+
+
+/**
+ *
+ * @export
+ * @interface LeaderboardWinnerResponse
+ */
+export interface LeaderboardWinnerResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof LeaderboardWinnerResponse
+ */
+ 'status': LeaderboardWinnerResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof LeaderboardWinnerResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {Array<LeaderboardWinner>}
+ * @memberof LeaderboardWinnerResponse
+ */
+ 'winners'?: Array<LeaderboardWinner>;
+}
+
+export const LeaderboardWinnerResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type LeaderboardWinnerResponseStatusEnum = typeof LeaderboardWinnerResponseStatusEnum[keyof typeof LeaderboardWinnerResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface LedgerAccount
+ */
+export interface LedgerAccount {
+ /**
+ * A unique identifier for this Ledger Account
+ * @type {string}
+ * @memberof LedgerAccount
+ */
+ 'uuid'?: string;
+ /**
+ * Human-readable description of the Ledger Account
+ * @type {string}
+ * @memberof LedgerAccount
+ */
+ 'display_name': string;
+ /**
+ *
+ * @type {string}
+ * @memberof LedgerAccount
+ */
+ 'qualified_name': string;
+ /**
+ * - `bp_commission` = BP_COMMISSION - `bp_wallet` = BP_WALLET - `user_wallet` = USER_WALLET - `cash` = CASH - `revenue` = REVENUE - `expense` = EXPENSE - `contest_wallet` = CONTEST_WALLET - `credit_line` = CREDIT_LINE - `wa_wallet` = WA_WALLET - `wa_budget_pool` = WA_BUDGET_POOL - `wa_held` = WA_HELD - `wa_credit_line` = WA_CREDIT_LINE
+ * @type {AccountType}
+ * @memberof LedgerAccount
+ */
+ 'account_type': AccountType;
+ /**
+ * - `-1` = CREDIT - `1` = DEBIT
+ * @type {Direction}
+ * @memberof LedgerAccount
+ */
+ 'normal_balance': Direction;
+ /**
+ *
+ * @type {string}
+ * @memberof LedgerAccount
+ */
+ 'reference_type'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof LedgerAccount
+ */
+ 'reference_uuid'?: string | null;
+ /**
+ * GRL\'s Ledger system allows tracking of transactions inany currency possible. This is useful for trackingpoints, stars, coins, or any other currency that may beused in a Supplier\'s platform.
+ * @type {string}
+ * @memberof LedgerAccount
+ */
+ 'currency'?: string;
+}
+
+
+/**
+ *
+ * @export
+ * @interface LedgerEntry
+ */
+export interface LedgerEntry {
+ /**
+ *
+ * @type {number}
+ * @memberof LedgerEntry
+ */
+ 'id'?: number | null;
+ /**
+ *
+ * @type {Direction}
+ * @memberof LedgerEntry
+ */
+ 'direction': Direction;
+ /**
+ *
+ * @type {string}
+ * @memberof LedgerEntry
+ */
+ 'account_uuid': string;
+ /**
+ * The USDCent amount. A LedgerEntry cannot be made for0 USDCent and it cannot be negative.
+ * @type {number}
+ * @memberof LedgerEntry
+ */
+ 'amount': number;
+ /**
+ *
+ * @type {number}
+ * @memberof LedgerEntry
+ */
+ 'transaction_id'?: number | null;
+}
+
+
+/**
+ *
+ * @export
+ * @interface LedgerTransaction
+ */
+export interface LedgerTransaction {
+ /**
+ *
+ * @type {number}
+ * @memberof LedgerTransaction
+ */
+ 'id'?: number | null;
+ /**
+ * When the Transaction (TX) was created into the database.This does not represent the exact time for any actionwhich may be responsible for this Transaction (TX), and TX timestamps will likely be a few milliseconds delayed
+ * @type {string}
+ * @memberof LedgerTransaction
+ */
+ 'created'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof LedgerTransaction
+ */
+ 'ext_description'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof LedgerTransaction
+ */
+ 'tag'?: string | null;
+ /**
+ *
+ * @type {{ [key: string]: string; }}
+ * @memberof LedgerTransaction
+ */
+ 'metadata'?: { [key: string]: string; };
+ /**
+ * A Transaction (TX) is composed of multiple Entry events.
+ * @type {Array<LedgerEntry>}
+ * @memberof LedgerTransaction
+ */
+ 'entries'?: Array<LedgerEntry>;
+}
+/**
+ *
+ * @export
+ * @interface ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+export interface ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner {
+ /**
+ * Name of contest. Can be displayed to user.
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'name': string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'contest_type'?: ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerContestTypeEnum;
+ /**
+ *
+ * @type {MilestoneContestEndCondition}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'end_condition': MilestoneContestEndCondition;
+ /**
+ *
+ * @type {Array<ContestPrize>}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'prizes'?: Array<ContestPrize>;
+ /**
+ * When the contest starts
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'starts_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'terms_and_conditions'?: string;
+ /**
+ *
+ * @type {ContestStatus}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'status'?: ContestStatus;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'country_isos'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'uuid'?: string;
+ /**
+ * Contest applies only to a single BP
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'product_id': string;
+ /**
+ * When this contest was created
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'created_at'?: string;
+ /**
+ * When this contest was last modified. Does not include entries being created/modified
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'updated_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'ended_at'?: string;
+ /**
+ *
+ * @type {ContestEndReason}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'end_reason'?: ContestEndReason;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'product_user_id': string;
+ /**
+ * The prizes won in this contest by the requested user
+ * @type {Array<ContestWinner>}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'user_winnings'?: Array<ContestWinner>;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'entry_type'?: ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerEntryTypeEnum;
+ /**
+ *
+ * @type {ContestEntryRule}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'entry_rule'?: ContestEntryRule;
+ /**
+ *
+ * @type {CurrentAmount}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'current_amount'?: CurrentAmount;
+ /**
+ * Count of unique participants
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'current_participants'?: number;
+ /**
+ * The total amount for this user for this contest
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'user_amount': number;
+ /**
+ *
+ * @type {UserAmountToday}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'user_amount_today': UserAmountToday;
+ /**
+ * Probability of this user winning 1 or more prizes, if the contestended right now
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'current_win_probability': number;
+ /**
+ *
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'projected_win_probability': number;
+ /**
+ * The specific leaderboard instance this contest is connected to
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'leaderboard_key': string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'tie_break_strategy'?: ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerTieBreakStrategyEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'user_rank': number;
+ /**
+ * Each user \'wins\' (receives prizes) once this target amount is reached.
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'target_amount': number;
+ /**
+ *
+ * @type {ContestEntryTrigger}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'entry_trigger'?: ContestEntryTrigger;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'valid_for'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'valid_for_event'?: ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerValidForEventEnum;
+ /**
+ * The number of times the milestone has been reached.
+ * @type {number}
+ * @memberof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+ */
+ 'win_count'?: number;
+}
+
+export const ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerContestTypeEnum = {
+ Milestone: 'milestone'
+} as const;
+
+export type ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerContestTypeEnum = typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerContestTypeEnum[keyof typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerContestTypeEnum];
+export const ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerEntryTypeEnum = {
+ Count: 'count'
+} as const;
+
+export type ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerEntryTypeEnum = typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerEntryTypeEnum[keyof typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerEntryTypeEnum];
+export const ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerTieBreakStrategyEnum = {
+ SplitPrizePool: 'split_prize_pool'
+} as const;
+
+export type ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerTieBreakStrategyEnum = typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerTieBreakStrategyEnum[keyof typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerTieBreakStrategyEnum];
+export const ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerValidForEventEnum = {
+ Signup: 'signup'
+} as const;
+
+export type ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerValidForEventEnum = typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerValidForEventEnum[keyof typeof ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInnerValidForEventEnum];
+
+/**
+ * This is used solely in API responses, so it is simplified.
+ * @export
+ * @interface MarketProfileKnowledge
+ */
+export interface MarketProfileKnowledge {
+ /**
+ * Marketplace this question is from
+ * @type {Source}
+ * @memberof MarketProfileKnowledge
+ */
+ 'source': Source;
+ /**
+ *
+ * @type {string}
+ * @memberof MarketProfileKnowledge
+ */
+ 'question_id': string;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof MarketProfileKnowledge
+ */
+ 'answer'?: Array<string>;
+ /**
+ * When the User submitted this Profiling data
+ * @type {string}
+ * @memberof MarketProfileKnowledge
+ */
+ 'created': string;
+}
+
+
+/**
+ *
+ * @export
+ * @interface MarketplaceBucket
+ */
+export interface MarketplaceBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof MarketplaceBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof MarketplaceBucket
+ */
+ 'uri': string;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the x-axis.
+ * @type {number}
+ * @memberof MarketplaceBucket
+ */
+ 'x'?: number;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the y-axis.
+ * @type {number}
+ * @memberof MarketplaceBucket
+ */
+ 'y'?: number;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof MarketplaceBucket
+ */
+ 'name'?: string;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof MarketplaceBucket
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {Array<CategoryAssociation>}
+ * @memberof MarketplaceBucket
+ */
+ 'category'?: Array<CategoryAssociation>;
+ /**
+ *
+ * @type {Array<BucketTask>}
+ * @memberof MarketplaceBucket
+ */
+ 'contents': Array<BucketTask>;
+ /**
+ *
+ * @type {DurationSummary}
+ * @memberof MarketplaceBucket
+ */
+ 'duration': DurationSummary;
+ /**
+ *
+ * @type {PayoutSummary}
+ * @memberof MarketplaceBucket
+ */
+ 'payout': PayoutSummary;
+ /**
+ * this is the source of the contents
+ * @type {string}
+ * @memberof MarketplaceBucket
+ */
+ 'source': MarketplaceBucketSourceEnum;
+}
+
+export const MarketplaceBucketSourceEnum = {
+ Innovate: 'innovate',
+ Dynata: 'dynata',
+ Schlesinger: 'schlesinger',
+ Purespectrum: 'purespectrum',
+ Morning: 'morning',
+ Pollfish: 'pollfish',
+ Precision: 'precision',
+ Repdata: 'repdata',
+ Prodege: 'prodege'
+} as const;
+
+export type MarketplaceBucketSourceEnum = typeof MarketplaceBucketSourceEnum[keyof typeof MarketplaceBucketSourceEnum];
+
+/**
+ *
+ * @export
+ * @interface MarketplaceInventorySummary
+ */
+export interface MarketplaceInventorySummary {
+ /**
+ * The count of tasks that are currently live
+ * @type {Array<CountStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'live_tasks'?: Array<CountStat>;
+ /**
+ * The count of gen-pop tasks that are currently live
+ * @type {Array<CountStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'live_gen_pop_tasks'?: Array<CountStat>;
+ /**
+ * The count of tasks created
+ * @type {Array<CountStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'tasks_created'?: Array<CountStat>;
+ /**
+ * Number of finishes needed across all live tasks
+ * @type {Array<CountStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'required_finishes'?: Array<CountStat>;
+ /**
+ * The distribution of payouts for all live tasks
+ * @type {Array<StatisticalSummaryStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'payout'?: Array<StatisticalSummaryStat>;
+ /**
+ * The distribution of expected durations for all live tasks
+ * @type {Array<StatisticalSummaryStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'expected_duration'?: Array<StatisticalSummaryStat>;
+ /**
+ * The distribution of required finishes on all live tasks
+ * @type {Array<StatisticalSummaryStat>}
+ * @memberof MarketplaceInventorySummary
+ */
+ 'required_finishes_per_task'?: Array<StatisticalSummaryStat>;
+}
+/**
+ * Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality. Offerwall code: `5fa23085`
+ * @export
+ * @interface MarketplaceOfferwall
+ */
+export interface MarketplaceOfferwall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof MarketplaceOfferwall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof MarketplaceOfferwall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof MarketplaceOfferwall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<MarketplaceBucket>}
+ * @memberof MarketplaceOfferwall
+ */
+ 'buckets'?: Array<MarketplaceBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof MarketplaceOfferwall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface MarketplaceOfferwallResponse
+ */
+export interface MarketplaceOfferwallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof MarketplaceOfferwallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {MarketplaceOfferwall}
+ * @memberof MarketplaceOfferwallResponse
+ */
+ 'offerwall': MarketplaceOfferwall;
+}
+/**
+ *
+ * @export
+ * @interface MarketplaceSummary
+ */
+export interface MarketplaceSummary {
+ /**
+ * Inventory of the marketplace
+ * @type {MarketplaceInventorySummary}
+ * @memberof MarketplaceSummary
+ */
+ 'inventory': MarketplaceInventorySummary;
+ /**
+ *
+ * @type {string}
+ * @memberof MarketplaceSummary
+ */
+ 'user_activity'?: string | null;
+}
+/**
+ * Maximum total value of entries per user
+ * @export
+ * @interface MaxEntryAmountPerUser
+ */
+export interface MaxEntryAmountPerUser {
+}
+/**
+ *
+ * @export
+ * @interface MaxGaugeBySource
+ */
+export interface MaxGaugeBySource {
+ /**
+ *
+ * @type {number}
+ * @memberof MaxGaugeBySource
+ */
+ 'value'?: number | null;
+ /**
+ *
+ * @type {{ [key: string]: number; }}
+ * @memberof MaxGaugeBySource
+ */
+ 'by_source'?: { [key: string]: number; };
+}
+/**
+ * Defines the conditions to evaluate to determine when the contest is over. Multiple conditions can be set. The contest is over once ANY conditions are met.
+ * @export
+ * @interface MilestoneContestEndCondition
+ */
+export interface MilestoneContestEndCondition {
+ /**
+ *
+ * @type {number}
+ * @memberof MilestoneContestEndCondition
+ */
+ 'max_winners'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneContestEndCondition
+ */
+ 'ends_at'?: string | null;
+}
+/**
+ *
+ * @export
+ * @interface MilestoneUserView
+ */
+export interface MilestoneUserView {
+ /**
+ * Each user \'wins\' (receives prizes) once this target amount is reached.
+ * @type {number}
+ * @memberof MilestoneUserView
+ */
+ 'target_amount': number;
+ /**
+ *
+ * @type {ContestEntryTrigger}
+ * @memberof MilestoneUserView
+ */
+ 'entry_trigger'?: ContestEntryTrigger | null;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'valid_for'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'valid_for_event'?: MilestoneUserViewValidForEventEnum | null;
+ /**
+ * Name of contest. Can be displayed to user.
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'name': string;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'description'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'contest_type'?: MilestoneUserViewContestTypeEnum;
+ /**
+ *
+ * @type {MilestoneContestEndCondition}
+ * @memberof MilestoneUserView
+ */
+ 'end_condition': MilestoneContestEndCondition;
+ /**
+ *
+ * @type {Array<ContestPrize>}
+ * @memberof MilestoneUserView
+ */
+ 'prizes'?: Array<ContestPrize>;
+ /**
+ * When the contest starts
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'starts_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'terms_and_conditions'?: string | null;
+ /**
+ *
+ * @type {ContestStatus}
+ * @memberof MilestoneUserView
+ */
+ 'status'?: ContestStatus;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'country_isos'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'uuid'?: string;
+ /**
+ * Contest applies only to a single BP
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'product_id': string;
+ /**
+ * When this contest was created
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'created_at'?: string;
+ /**
+ * When this contest was last modified. Does not include entries being created/modified
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'updated_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'ended_at'?: string | null;
+ /**
+ *
+ * @type {ContestEndReason}
+ * @memberof MilestoneUserView
+ */
+ 'end_reason'?: ContestEndReason | null;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'product_user_id': string;
+ /**
+ * The prizes won in this contest by the requested user
+ * @type {Array<ContestWinner>}
+ * @memberof MilestoneUserView
+ */
+ 'user_winnings'?: Array<ContestWinner>;
+ /**
+ *
+ * @type {string}
+ * @memberof MilestoneUserView
+ */
+ 'entry_type'?: MilestoneUserViewEntryTypeEnum;
+ /**
+ * The number of times the milestone has been reached.
+ * @type {number}
+ * @memberof MilestoneUserView
+ */
+ 'win_count'?: number;
+ /**
+ * The total amount for this user for this contest
+ * @type {number}
+ * @memberof MilestoneUserView
+ */
+ 'user_amount': number;
+}
+
+export const MilestoneUserViewValidForEventEnum = {
+ Signup: 'signup'
+} as const;
+
+export type MilestoneUserViewValidForEventEnum = typeof MilestoneUserViewValidForEventEnum[keyof typeof MilestoneUserViewValidForEventEnum];
+export const MilestoneUserViewContestTypeEnum = {
+ Milestone: 'milestone'
+} as const;
+
+export type MilestoneUserViewContestTypeEnum = typeof MilestoneUserViewContestTypeEnum[keyof typeof MilestoneUserViewContestTypeEnum];
+export const MilestoneUserViewEntryTypeEnum = {
+ Count: 'count'
+} as const;
+
+export type MilestoneUserViewEntryTypeEnum = typeof MilestoneUserViewEntryTypeEnum[keyof typeof MilestoneUserViewEntryTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface OfferWallCategoryRequest
+ */
+export interface OfferWallCategoryRequest {
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof OfferWallCategoryRequest
+ */
+ 'adwords_category'?: Array<string> | null;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof OfferWallCategoryRequest
+ */
+ 'category'?: Array<string> | null;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof OfferWallCategoryRequest
+ */
+ 'exclude_adwords_category'?: Array<string> | null;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof OfferWallCategoryRequest
+ */
+ 'exclude_category'?: Array<string> | null;
+}
+/**
+ *
+ * @export
+ * @interface OfferWallInfo
+ */
+export interface OfferWallInfo {
+ /**
+ *
+ * @type {boolean}
+ * @memberof OfferWallInfo
+ */
+ 'success': boolean;
+}
+/**
+ *
+ * @export
+ * @interface OfferWallRequestYieldmanParams
+ */
+export interface OfferWallRequestYieldmanParams {
+ /**
+ * Centered around 0. Higher results in higher weight given to conversion (in the scoring function)
+ * @type {number}
+ * @memberof OfferWallRequestYieldmanParams
+ */
+ 'conversion_factor_adj'?: number;
+ /**
+ * Centered around 0. Higher results in higher penalty given to dropoffs (in the scoring function)
+ * @type {number}
+ * @memberof OfferWallRequestYieldmanParams
+ */
+ 'dropoffrate_factor_adj'?: number;
+ /**
+ * Centered around 0. Higher results in higher penalty given to long fail (in the scoring function)
+ * @type {number}
+ * @memberof OfferWallRequestYieldmanParams
+ */
+ 'longfail_factor_adj'?: number;
+ /**
+ * Centered around 0. Higher results in higher penalty given to recons (in the scoring function)
+ * @type {number}
+ * @memberof OfferWallRequestYieldmanParams
+ */
+ 'recon_factor_adj'?: number;
+ /**
+ * Tolerance for recon likelihood (0 to 1)
+ * @type {number}
+ * @memberof OfferWallRequestYieldmanParams
+ */
+ 'recon_likelihood_max'?: number;
+}
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const OfferwallReason = {
+ UserBlocked: 'USER_BLOCKED',
+ HighReconRate: 'HIGH_RECON_RATE',
+ UncommonDemographics: 'UNCOMMON_DEMOGRAPHICS',
+ UnderMinimumAge: 'UNDER_MINIMUM_AGE',
+ ExhaustedHighValueSupply: 'EXHAUSTED_HIGH_VALUE_SUPPLY',
+ AllEligibleAttempted: 'ALL_ELIGIBLE_ATTEMPTED',
+ LowCurrentSupply: 'LOW_CURRENT_SUPPLY'
+} as const;
+
+export type OfferwallReason = typeof OfferwallReason[keyof typeof OfferwallReason];
+
+
+/**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket. Offerwall code: `6f27b1ae`
+ * @export
+ * @interface OneShotOfferwall
+ */
+export interface OneShotOfferwall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof OneShotOfferwall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof OneShotOfferwall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof OneShotOfferwall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<OneShotOfferwallBucket>}
+ * @memberof OneShotOfferwall
+ */
+ 'buckets'?: Array<OneShotOfferwallBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof OneShotOfferwall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface OneShotOfferwallBucket
+ */
+export interface OneShotOfferwallBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof OneShotOfferwallBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof OneShotOfferwallBucket
+ */
+ 'uri': string;
+ /**
+ * The bucket\'s expected duration, in seconds
+ * @type {number}
+ * @memberof OneShotOfferwallBucket
+ */
+ 'duration': number;
+ /**
+ * The bucket\'s min payout, in usd cents
+ * @type {number}
+ * @memberof OneShotOfferwallBucket
+ */
+ 'min_payout': number;
+}
+/**
+ *
+ * @export
+ * @interface OneShotOfferwallResponse
+ */
+export interface OneShotOfferwallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof OneShotOfferwallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {OneShotOfferwall}
+ * @memberof OneShotOfferwallResponse
+ */
+ 'offerwall': OneShotOfferwall;
+}
+/**
+ * Stores payout-type-specific order information that is returned from the external payout provider.
+ * @export
+ * @interface OrderData
+ */
+export interface OrderData {
+ /**
+ *
+ * @type {string}
+ * @memberof OrderData
+ */
+ 'type'?: OrderDataTypeEnum;
+ /**
+ *
+ * @type {number}
+ * @memberof OrderData
+ */
+ 'shipping_cost': number;
+ /**
+ *
+ * @type {string}
+ * @memberof OrderData
+ */
+ 'tracking_number'?: string;
+ /**
+ *
+ * @type {ShippingMethod}
+ * @memberof OrderData
+ */
+ 'shipping_method'?: ShippingMethod;
+ /**
+ *
+ * @type {ShippingCarrier}
+ * @memberof OrderData
+ */
+ 'carrier'?: ShippingCarrier;
+ /**
+ *
+ * @type {string}
+ * @memberof OrderData
+ */
+ 'ship_date'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof OrderData
+ */
+ 'estimated_delivery_date'?: string;
+ /**
+ *
+ * @type {DeliveryStatus}
+ * @memberof OrderData
+ */
+ 'delivery_status'?: DeliveryStatus;
+ /**
+ *
+ * @type {string}
+ * @memberof OrderData
+ */
+ 'last_updated'?: string;
+}
+
+export const OrderDataTypeEnum = {
+ CashInMail: 'CASH_IN_MAIL'
+} as const;
+
+export type OrderDataTypeEnum = typeof OrderDataTypeEnum[keyof typeof OrderDataTypeEnum];
+
+/**
+ * We can\'t use our USDCent class in here because aside from it not supporting negative values for our adjustments, FastAPI also complains because it doesn\'t know how to generate documentation for it. - Max 2024-06-25
+ * @export
+ * @interface POPFinancial
+ */
+export interface POPFinancial {
+ /**
+ *
+ * @type {string}
+ * @memberof POPFinancial
+ */
+ 'product_id'?: string | null;
+ /**
+ * The starting time block for the respective \'Period\' thatthis grouping is on. The `time` could be the start of a 1 minute or 1 hour block for example.
+ * @type {string}
+ * @memberof POPFinancial
+ */
+ 'time': string;
+ /**
+ * The total amount (in USD cents) that the Brokerage Producthas earned within a respective time period.
+ * @type {number}
+ * @memberof POPFinancial
+ */
+ 'payout'?: number;
+ /**
+ * The total amount (in USD cents) that the Brokerage Producthas had adjusted within a respective time period. Most ofthe time, this will be negative due to Complete to Incomplete reconciliations. However, it can also be positive due to Incomplete to Complete adjustments.
+ * @type {number}
+ * @memberof POPFinancial
+ */
+ 'adjustment': number;
+ /**
+ *
+ * @type {Array<AdjustmentType>}
+ * @memberof POPFinancial
+ */
+ 'adjustment_types': Array<AdjustmentType>;
+ /**
+ * For Product accounts that are setup with Respondent payouts,competitions, user bonuses, or other associated \'costs\', thoseexpenses are accounted for here. This will be negative forthose types of costs.
+ * @type {number}
+ * @memberof POPFinancial
+ */
+ 'expense': number;
+ /**
+ * This is the sum of the Payout total, Adjustment and any Expenses total. It can be positive or negative for any specific time period.
+ * @type {number}
+ * @memberof POPFinancial
+ */
+ 'net': number;
+ /**
+ * Any ACH or Wire amount that was issued between GRL and the Supplier.
+ * @type {number}
+ * @memberof POPFinancial
+ */
+ 'payment': number;
+}
+/**
+ *
+ * @export
+ * @interface PatternValidation
+ */
+export interface PatternValidation {
+ /**
+ * Message to display if validation fails
+ * @type {string}
+ * @memberof PatternValidation
+ */
+ 'message': string;
+ /**
+ * Regex string to validate. min_length and max_length are checked separately, even if they are part of the regex.
+ * @type {string}
+ * @memberof PatternValidation
+ */
+ 'pattern': string;
+}
+/**
+ * @type Payload
+ * @export
+ */
+export type Payload = { event_type: 'session.enter' } & SessionEnterPayload | { event_type: 'session.finish' } & SessionFinishPayload | { event_type: 'task.enter' } & TaskEnterPayload | { event_type: 'task.finish' } & TaskFinishPayload;
+
+/**
+ * Store configuration related to payouts, payout transformation, and user payout formatting.
+ * @export
+ * @interface PayoutConfig
+ */
+export interface PayoutConfig {
+ /**
+ *
+ * @type {string}
+ * @memberof PayoutConfig
+ */
+ 'payout_format'?: string | null;
+ /**
+ *
+ * @type {PayoutTransformation}
+ * @memberof PayoutConfig
+ */
+ 'payout_transformation'?: PayoutTransformation | null;
+}
+/**
+ * The max size of the db field that holds this value is 20, so please don\'t add new values longer than that!
+ * @export
+ * @enum {string}
+ */
+
+export const PayoutStatus = {
+ Pending: 'PENDING',
+ Approved: 'APPROVED',
+ Rejected: 'REJECTED',
+ Cancelled: 'CANCELLED',
+ Failed: 'FAILED',
+ Complete: 'COMPLETE'
+} as const;
+
+export type PayoutStatus = typeof PayoutStatus[keyof typeof PayoutStatus];
+
+
+/**
+ * Payouts are in Integer USD Cents
+ * @export
+ * @interface PayoutSummary
+ */
+export interface PayoutSummary {
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'min': number;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'max': number;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'mean'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'q1': number;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'q2': number;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'q3': number;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'lower_whisker': number;
+ /**
+ *
+ * @type {number}
+ * @memberof PayoutSummary
+ */
+ 'upper_whisker': number;
+}
+/**
+ * This model describe how the bp_payout is converted to the user_payout. If None, the user_payout is None. If the user_wallet_enabled is `False`, the user_payout is used to 1) know how to transform the expected payouts for offerwall buckets (if min_payout is requested, this is based on the user_payout) 2) show the user (using the payout_format) how much they made (in the Task Status Response). If the user_wallet_enabled is `True`, then in addition to the above, the user_payout is the amount actually paid to the user\'s wallet.
+ * @export
+ * @interface PayoutTransformation
+ */
+export interface PayoutTransformation {
+ /**
+ * The name of the transformation function to use.
+ * @type {string}
+ * @memberof PayoutTransformation
+ */
+ 'f': PayoutTransformationFEnum;
+ /**
+ *
+ * @type {PayoutTransformationPercentArgs}
+ * @memberof PayoutTransformation
+ */
+ 'kwargs'?: PayoutTransformationPercentArgs | null;
+}
+
+export const PayoutTransformationFEnum = {
+ PayoutTransformationPercent: 'payout_transformation_percent',
+ PayoutTransformationAmt: 'payout_transformation_amt'
+} as const;
+
+export type PayoutTransformationFEnum = typeof PayoutTransformationFEnum[keyof typeof PayoutTransformationFEnum];
+
+/**
+ *
+ * @export
+ * @interface PayoutTransformationPercentArgs
+ */
+export interface PayoutTransformationPercentArgs {
+ /**
+ * The percentage of the bp_payout to pay the user
+ * @type {number}
+ * @memberof PayoutTransformationPercentArgs
+ */
+ 'pct': number;
+ /**
+ *
+ * @type {string}
+ * @memberof PayoutTransformationPercentArgs
+ */
+ 'min_payout'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof PayoutTransformationPercentArgs
+ */
+ 'max_payout'?: string | null;
+}
+/**
+ * The method in which the requested payout is delivered.
+ * @export
+ * @enum {string}
+ */
+
+export const PayoutType = {
+ Paypal: 'PAYPAL',
+ Tango: 'TANGO',
+ Dwolla: 'DWOLLA',
+ Ach: 'ACH',
+ Wire: 'WIRE',
+ CashInMail: 'CASH_IN_MAIL',
+ Prize: 'PRIZE',
+ Amt: 'AMT',
+ AmtBonus: 'AMT_BONUS',
+ AmtAssignment: 'AMT_ASSIGNMENT',
+ AmtAssignment2: 'AMT_ASSIGNMENT'
+} as const;
+
+export type PayoutType = typeof PayoutType[keyof typeof PayoutType];
+
+
+/**
+ *
+ * @export
+ * @interface PaypalCashoutMethodData
+ */
+export interface PaypalCashoutMethodData {
+ /**
+ *
+ * @type {string}
+ * @memberof PaypalCashoutMethodData
+ */
+ 'type'?: PaypalCashoutMethodDataTypeEnum;
+ /**
+ * Email address of the paypal user
+ * @type {string}
+ * @memberof PaypalCashoutMethodData
+ */
+ 'email': string;
+}
+
+export const PaypalCashoutMethodDataTypeEnum = {
+ Paypal: 'PAYPAL'
+} as const;
+
+export type PaypalCashoutMethodDataTypeEnum = typeof PaypalCashoutMethodDataTypeEnum[keyof typeof PaypalCashoutMethodDataTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface PingMessage
+ */
+export interface PingMessage {
+ /**
+ *
+ * @type {string}
+ * @memberof PingMessage
+ */
+ 'kind'?: PingMessageKindEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof PingMessage
+ */
+ 'timestamp'?: string;
+}
+
+export const PingMessageKindEnum = {
+ Ping: 'ping'
+} as const;
+
+export type PingMessageKindEnum = typeof PingMessageKindEnum[keyof typeof PingMessageKindEnum];
+
+/**
+ *
+ * @export
+ * @interface PongMessage
+ */
+export interface PongMessage {
+ /**
+ *
+ * @type {string}
+ * @memberof PongMessage
+ */
+ 'kind'?: PongMessageKindEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof PongMessage
+ */
+ 'timestamp'?: string;
+}
+
+export const PongMessageKindEnum = {
+ Pong: 'pong'
+} as const;
+
+export type PongMessageKindEnum = typeof PongMessageKindEnum[keyof typeof PongMessageKindEnum];
+
+/**
+ *
+ * @export
+ * @interface Product
+ */
+export interface Product {
+ /**
+ * Unique identifier of the Brokerage Product
+ * @type {string}
+ * @memberof Product
+ */
+ 'id'?: string;
+ /**
+ * Name of the Brokerage Product. Must be unique within a Team
+ * @type {string}
+ * @memberof Product
+ */
+ 'name': string;
+ /**
+ * This is only used to hard block a Product in order to immediately & safely protect against fraud entrances.
+ * @type {boolean}
+ * @memberof Product
+ */
+ 'enabled'?: boolean;
+ /**
+ * This is only to determine if ACH or Wire payments should be made to the Produce.
+ * @type {boolean}
+ * @memberof Product
+ */
+ 'payments_enabled'?: boolean;
+ /**
+ *
+ * @type {string}
+ * @memberof Product
+ */
+ 'created'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof Product
+ */
+ 'team_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof Product
+ */
+ 'business_id'?: string | null;
+ /**
+ * Tags which are used to annotate supplier traffic
+ * @type {Set<SupplierTag>}
+ * @memberof Product
+ */
+ 'tags'?: Set<SupplierTag>;
+ /**
+ *
+ * @type {string}
+ * @memberof Product
+ */
+ 'commission_pct'?: string;
+ /**
+ * Where to redirect the user after finishing a session. When a user get redirected back to the supplier, a query param will be added with the name \'tsid\', and the value of the TSID for the session. For example: callback_uri: \'https://www.example.com/test/?a=1&b=2\' might result in the user getting redirected to: \'https://www.example.com/grl-callback/?a=1&b=2&tsid=c6ab6ba1e75b44e2bf5aab00fc68e3b7\'.
+ * @type {string}
+ * @memberof Product
+ */
+ 'redirect_url': string;
+ /**
+ * This is the domain that is used for the GRS (General Research Survey) platform. This is a simple javascript application which may profile the respondent for anyprofiling questions, along with collecting any browserbased security information. The value is a scheme+domain only (no path).
+ * @type {string}
+ * @memberof Product
+ */
+ 'harmonizer_domain'?: string;
+ /**
+ *
+ * @type {SourcesConfig}
+ * @memberof Product
+ */
+ 'sources_config'?: SourcesConfig;
+ /**
+ *
+ * @type {SessionConfig}
+ * @memberof Product
+ */
+ 'session_config'?: SessionConfig;
+ /**
+ *
+ * @type {PayoutConfig}
+ * @memberof Product
+ */
+ 'payout_config'?: PayoutConfig;
+ /**
+ *
+ * @type {UserWalletConfig}
+ * @memberof Product
+ */
+ 'user_wallet_config'?: UserWalletConfig;
+ /**
+ *
+ * @type {UserCreateConfig}
+ * @memberof Product
+ */
+ 'user_create_config'?: UserCreateConfig;
+ /**
+ *
+ * @type {object}
+ * @memberof Product
+ */
+ 'offerwall_config'?: object;
+ /**
+ *
+ * @type {ProfilingConfig}
+ * @memberof Product
+ */
+ 'profiling_config'?: ProfilingConfig;
+ /**
+ *
+ * @type {UserHealthConfig}
+ * @memberof Product
+ */
+ 'user_health_config'?: UserHealthConfig;
+ /**
+ *
+ * @type {YieldManConfig}
+ * @memberof Product
+ */
+ 'yield_man_config'?: YieldManConfig;
+ /**
+ *
+ * @type {ProductBalances}
+ * @memberof Product
+ */
+ 'balance'?: ProductBalances | null;
+ /**
+ *
+ * @type {string}
+ * @memberof Product
+ */
+ 'payouts_total_str'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof Product
+ */
+ 'payouts_total'?: number | null;
+ /**
+ *
+ * @type {Array<BrokerageProductPayoutEvent>}
+ * @memberof Product
+ */
+ 'payouts'?: Array<BrokerageProductPayoutEvent> | null;
+ /**
+ *
+ * @type {Array<POPFinancial>}
+ * @memberof Product
+ */
+ 'pop_financial'?: Array<POPFinancial> | null;
+ /**
+ *
+ * @type {LedgerAccount}
+ * @memberof Product
+ */
+ 'bp_account'?: LedgerAccount | null;
+ /**
+ *
+ * @type {UserWalletConfig}
+ * @memberof Product
+ */
+ 'user_wallet': UserWalletConfig;
+}
+/**
+ *
+ * @export
+ * @interface ProductBalances
+ */
+export interface ProductBalances {
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'product_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'last_event'?: string | null;
+ /**
+ * The total amount that has been earned by the Task completes, for this Brokerage Product account.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'bp_payment_credit'?: number;
+ /**
+ * Positive reconciliations issued back to the Brokerage Product account.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'adjustment_credit'?: number;
+ /**
+ * Negative reconciliations for any Task completes
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'adjustment_debit'?: number;
+ /**
+ * ACH or Wire amounts issued to GRL from a Supplier to recoup for a negative Brokerage Product balance
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'supplier_credit'?: number;
+ /**
+ * ACH or Wire amounts sent to a Supplier
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'supplier_debit'?: number;
+ /**
+ * If a respondent ever pays back an product account.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'user_bonus_credit'?: number;
+ /**
+ * Pay a user into their wallet balance. There is no fee here. There is only a fee when the user requests a payout.The bonus could be as a bribe, winnings for a contest, leaderboard, etc.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'user_bonus_debit'?: number;
+ /**
+ * This is the amount that we decide to credit as havingtaken from this Product. If there is any amount not issuedit is summed up over the Business to offset any negativebalances elsewhere.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'issued_payment'?: number;
+ /**
+ * The sum amount of all Task payouts
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'payout': number;
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'payout_usd_str': string;
+ /**
+ * The sum amount of all Task Adjustments
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'adjustment': number;
+ /**
+ * The sum amount of any associated Product Expenses (eg: user bonuses)
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'expense': number;
+ /**
+ * The Product\'s Net Earnings which is equal to the totalamount of Task Payouts, with Task Adjustments and anyProduct Expenses deducted. This can be positive ornegative.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'net': number;
+ /**
+ * The sum amount of all Supplier Payments (eg ACH or Wire transfers)
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'payment': number;
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'payment_usd_str': string;
+ /**
+ * The Product\'s Balance which is equal to the Product\'s Netamount with already issued Supplier Payments deducted. This can be positive or negative.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'balance': number;
+ /**
+ * The Smart Retainer is an about of money that is held byGRL to account for any Task Adjustments that may occurin the future. The amount will always be positive, andif the Product\'s balance is negative, the retainer will be $0.00 as the Product is not eligible for any SupplierPayments either way.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'retainer': number;
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'retainer_usd_str': string;
+ /**
+ * The Available Balance is the amount that is currently, andimmediately available for withdraw from the Supplier\'sbalance. Supplier Payments are made every Friday for Businesses with an ACH connected Bank Account to GRL, while a Business that requires an International Wire are issued on the last Friday of every Month.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'available_balance': number;
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'available_balance_usd_str': string;
+ /**
+ *
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'recoup': number;
+ /**
+ *
+ * @type {string}
+ * @memberof ProductBalances
+ */
+ 'recoup_usd_str': string;
+ /**
+ * The percentage of USDCent value that has been adjustedover all time for this Product.
+ * @type {number}
+ * @memberof ProductBalances
+ */
+ 'adjustment_percent': number;
+}
+/**
+ *
+ * @export
+ * @interface ProfilingConfig
+ */
+export interface ProfilingConfig {
+ /**
+ * If False, the harmonizer/profiling system is not used at all. This should never be False unless special circumstances
+ * @type {boolean}
+ * @memberof ProfilingConfig
+ */
+ 'enabled'?: boolean;
+ /**
+ * If grs_enabled is False, and is_grs is passed in the profiling-questions call, then don\'t actually return any questions. This allows a client to hit the endpoint with no limit and still get questions. In effect, this means that we\'ll redirect the user through the GRS system but won\'t present them any questions.
+ * @type {boolean}
+ * @memberof ProfilingConfig
+ */
+ 'grs_enabled'?: boolean;
+ /**
+ *
+ * @type {number}
+ * @memberof ProfilingConfig
+ */
+ 'n_questions'?: number | null;
+ /**
+ * The max number of questions we would ask in a session
+ * @type {number}
+ * @memberof ProfilingConfig
+ */
+ 'max_questions'?: number;
+ /**
+ * The average number of questions to ask in a session
+ * @type {number}
+ * @memberof ProfilingConfig
+ */
+ 'avg_question_count'?: number;
+ /**
+ * Scale how frequently we inject profiling questions, relative to the default.1 is default, 2 is twice as often. 10 means always. 0.5 half as often
+ * @type {number}
+ * @memberof ProfilingConfig
+ */
+ 'task_injection_freq_mult'?: number;
+ /**
+ * Non-us multiplier, used to increase freq and length of profilers in all non-us countries.This value is multiplied by task_injection_freq_mult and avg_question_count.
+ * @type {number}
+ * @memberof ProfilingConfig
+ */
+ 'non_us_mult'?: number;
+ /**
+ * How frequently we should refresh hidden questions
+ * @type {number}
+ * @memberof ProfilingConfig
+ */
+ 'hidden_questions_expiration_hours'?: number;
+}
+/**
+ *
+ * @export
+ * @interface ProfilingInfoResponse
+ */
+export interface ProfilingInfoResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof ProfilingInfoResponse
+ */
+ 'status': ProfilingInfoResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof ProfilingInfoResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {Array<UpkProperty>}
+ * @memberof ProfilingInfoResponse
+ */
+ 'profiling-info': Array<UpkProperty>;
+}
+
+export const ProfilingInfoResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type ProfilingInfoResponseStatusEnum = typeof ProfilingInfoResponseStatusEnum[keyof typeof ProfilingInfoResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const PropertyType = {
+ I: 'i',
+ N: 'n',
+ X: 'x'
+} as const;
+
+export type PropertyType = typeof PropertyType[keyof typeof PropertyType];
+
+
+/**
+ *
+ * @export
+ * @interface RaffleUserView
+ */
+export interface RaffleUserView {
+ /**
+ * Name of contest. Can be displayed to user.
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'name': string;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'description'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'contest_type'?: RaffleUserViewContestTypeEnum;
+ /**
+ *
+ * @type {ContestEndCondition}
+ * @memberof RaffleUserView
+ */
+ 'end_condition': ContestEndCondition;
+ /**
+ *
+ * @type {Array<ContestPrize>}
+ * @memberof RaffleUserView
+ */
+ 'prizes'?: Array<ContestPrize>;
+ /**
+ * When the contest starts
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'starts_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'terms_and_conditions'?: string | null;
+ /**
+ *
+ * @type {ContestStatus}
+ * @memberof RaffleUserView
+ */
+ 'status'?: ContestStatus;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'country_isos'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'uuid'?: string;
+ /**
+ * Contest applies only to a single BP
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'product_id': string;
+ /**
+ * When this contest was created
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'created_at'?: string;
+ /**
+ * When this contest was last modified. Does not include entries being created/modified
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'updated_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'ended_at'?: string | null;
+ /**
+ *
+ * @type {ContestEndReason}
+ * @memberof RaffleUserView
+ */
+ 'end_reason'?: ContestEndReason | null;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'product_user_id': string;
+ /**
+ * The prizes won in this contest by the requested user
+ * @type {Array<ContestWinner>}
+ * @memberof RaffleUserView
+ */
+ 'user_winnings'?: Array<ContestWinner>;
+ /**
+ *
+ * @type {string}
+ * @memberof RaffleUserView
+ */
+ 'entry_type'?: RaffleUserViewEntryTypeEnum;
+ /**
+ *
+ * @type {ContestEntryRule}
+ * @memberof RaffleUserView
+ */
+ 'entry_rule'?: ContestEntryRule;
+ /**
+ *
+ * @type {CurrentAmount}
+ * @memberof RaffleUserView
+ */
+ 'current_amount'?: CurrentAmount;
+ /**
+ * Count of unique participants
+ * @type {number}
+ * @memberof RaffleUserView
+ */
+ 'current_participants'?: number;
+ /**
+ *
+ * @type {UserAmount}
+ * @memberof RaffleUserView
+ */
+ 'user_amount': UserAmount;
+ /**
+ *
+ * @type {UserAmountToday}
+ * @memberof RaffleUserView
+ */
+ 'user_amount_today': UserAmountToday;
+ /**
+ * Probability of this user winning 1 or more prizes, if the contestended right now
+ * @type {number}
+ * @memberof RaffleUserView
+ */
+ 'current_win_probability': number;
+ /**
+ *
+ * @type {number}
+ * @memberof RaffleUserView
+ */
+ 'projected_win_probability': number | null;
+}
+
+export const RaffleUserViewContestTypeEnum = {
+ Raffle: 'raffle'
+} as const;
+
+export type RaffleUserViewContestTypeEnum = typeof RaffleUserViewContestTypeEnum[keyof typeof RaffleUserViewContestTypeEnum];
+export const RaffleUserViewEntryTypeEnum = {
+ Cash: 'cash'
+} as const;
+
+export type RaffleUserViewEntryTypeEnum = typeof RaffleUserViewEntryTypeEnum[keyof typeof RaffleUserViewEntryTypeEnum];
+
+/**
+ * Supported Currencies for Foreign Redemptions
+ * @export
+ * @enum {string}
+ */
+
+export const RedemptionCurrency = {
+ Usd: 'USD',
+ Cad: 'CAD',
+ Gbp: 'GBP',
+ Eur: 'EUR',
+ Inr: 'INR',
+ Aud: 'AUD',
+ Pln: 'PLN',
+ Sek: 'SEK',
+ Sgd: 'SGD',
+ Mxn: 'MXN'
+} as const;
+
+export type RedemptionCurrency = typeof RedemptionCurrency[keyof typeof RedemptionCurrency];
+
+
+/**
+ *
+ * @export
+ * @interface ReportNotes
+ */
+export interface ReportNotes {
+}
+/**
+ *
+ * @export
+ * @interface ReportTask
+ */
+export interface ReportTask {
+ /**
+ * The unique identifier for the user, which is set by the Supplier.
+ * @type {string}
+ * @memberof ReportTask
+ */
+ 'bpuid': string;
+ /**
+ * The reason a user reported a task. Allowed values: - __0__ *(REASON_UNKNOWN)*: Used to indicate the user exited the task without giving feedback - __1__ *(TECHNICAL_ERROR)*: Task is in the wrong language/country, unanswerable question, won\'t proceed to next question, loading forever, error message - __2__ *(NO_REDIRECT)*: Task ended (completed or failed, and showed the user some dialog indicating the task was over), but failed to redirect - __3__ *(PRIVACY_INVASION)*: Asked for full name, home address, identity on another site, cc - __4__ *(UNCOMFORTABLE_TOPICS)*: Asked about children, employer, medical issues, drug use, STDs, etc. - __5__ *(ASKED_FOR_NOT_ALLOWED_ACTION)*: Asked to install software, signup/login to external site, access webcam, promise to pay using external site, etc. - __6__ *(BAD_ON_MOBILE)*: Task doesn\'t work well on a mobile device - __7__ *(DIDNT_LIKE)*: Too long, too boring, confusing, complicated, too many open-ended/free-response questions
+ * @type {Array<ReportValue>}
+ * @memberof ReportTask
+ */
+ 'reasons'?: Array<ReportValue>;
+ /**
+ *
+ * @type {string}
+ * @memberof ReportTask
+ */
+ 'notes'?: string;
+}
+/**
+ * The reason a user reported a task.
+ * @export
+ * @enum {number}
+ */
+
+export const ReportValue = {
+ NUMBER_0: 0,
+ NUMBER_1: 1,
+ NUMBER_2: 2,
+ NUMBER_3: 3,
+ NUMBER_4: 4,
+ NUMBER_5: 5,
+ NUMBER_6: 6,
+ NUMBER_7: 7
+} as const;
+
+export type ReportValue = typeof ReportValue[keyof typeof ReportValue];
+
+
+/**
+ *
+ * @export
+ * @interface ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+export interface ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet {
+ /**
+ * Name of contest. Can be displayed to user.
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'name': string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'contest_type'?: ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetContestTypeEnum;
+ /**
+ *
+ * @type {MilestoneContestEndCondition}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'end_condition': MilestoneContestEndCondition;
+ /**
+ *
+ * @type {Array<ContestPrize>}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'prizes'?: Array<ContestPrize>;
+ /**
+ * When the contest starts
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'starts_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'terms_and_conditions'?: string;
+ /**
+ *
+ * @type {ContestStatus}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'status'?: ContestStatus;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'country_isos'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'uuid'?: string;
+ /**
+ * Contest applies only to a single BP
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'product_id': string;
+ /**
+ * When this contest was created
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'created_at'?: string;
+ /**
+ * When this contest was last modified. Does not include entries being created/modified
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'updated_at'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'ended_at'?: string;
+ /**
+ *
+ * @type {ContestEndReason}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'end_reason'?: ContestEndReason;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'product_user_id': string;
+ /**
+ * The prizes won in this contest by the requested user
+ * @type {Array<ContestWinner>}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'user_winnings'?: Array<ContestWinner>;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'entry_type'?: ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetEntryTypeEnum;
+ /**
+ *
+ * @type {ContestEntryRule}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'entry_rule'?: ContestEntryRule;
+ /**
+ *
+ * @type {CurrentAmount}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'current_amount'?: CurrentAmount;
+ /**
+ * Count of unique participants
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'current_participants'?: number;
+ /**
+ * The total amount for this user for this contest
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'user_amount': number;
+ /**
+ *
+ * @type {UserAmountToday}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'user_amount_today': UserAmountToday;
+ /**
+ * Probability of this user winning 1 or more prizes, if the contestended right now
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'current_win_probability': number;
+ /**
+ *
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'projected_win_probability': number;
+ /**
+ * The specific leaderboard instance this contest is connected to
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'leaderboard_key': string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'tie_break_strategy'?: ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetTieBreakStrategyEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'user_rank': number;
+ /**
+ * Each user \'wins\' (receives prizes) once this target amount is reached.
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'target_amount': number;
+ /**
+ *
+ * @type {ContestEntryTrigger}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'entry_trigger'?: ContestEntryTrigger;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'valid_for'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'valid_for_event'?: ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetValidForEventEnum;
+ /**
+ * The number of times the milestone has been reached.
+ * @type {number}
+ * @memberof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+ */
+ 'win_count'?: number;
+}
+
+export const ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetContestTypeEnum = {
+ Milestone: 'milestone'
+} as const;
+
+export type ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetContestTypeEnum = typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetContestTypeEnum[keyof typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetContestTypeEnum];
+export const ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetEntryTypeEnum = {
+ Count: 'count'
+} as const;
+
+export type ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetEntryTypeEnum = typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetEntryTypeEnum[keyof typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetEntryTypeEnum];
+export const ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetTieBreakStrategyEnum = {
+ SplitPrizePool: 'split_prize_pool'
+} as const;
+
+export type ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetTieBreakStrategyEnum = typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetTieBreakStrategyEnum[keyof typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetTieBreakStrategyEnum];
+export const ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetValidForEventEnum = {
+ Signup: 'signup'
+} as const;
+
+export type ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetValidForEventEnum = typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetValidForEventEnum[keyof typeof ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGetValidForEventEnum];
+
+/**
+ *
+ * @export
+ * @interface ResponseWebsocketEventsDocsWsEventsDocsGet
+ */
+export interface ResponseWebsocketEventsDocsWsEventsDocsGet {
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseWebsocketEventsDocsWsEventsDocsGet
+ */
+ 'kind'?: ResponseWebsocketEventsDocsWsEventsDocsGetKindEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseWebsocketEventsDocsWsEventsDocsGet
+ */
+ 'timestamp'?: string;
+ /**
+ *
+ * @type {StatsSnapshot}
+ * @memberof ResponseWebsocketEventsDocsWsEventsDocsGet
+ */
+ 'data': StatsSnapshot;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseWebsocketEventsDocsWsEventsDocsGet
+ */
+ 'country_iso'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof ResponseWebsocketEventsDocsWsEventsDocsGet
+ */
+ 'product_id': string;
+}
+
+export const ResponseWebsocketEventsDocsWsEventsDocsGetKindEnum = {
+ Pong: 'pong'
+} as const;
+
+export type ResponseWebsocketEventsDocsWsEventsDocsGetKindEnum = typeof ResponseWebsocketEventsDocsWsEventsDocsGetKindEnum[keyof typeof ResponseWebsocketEventsDocsWsEventsDocsGetKindEnum];
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const Scope = {
+ Global: 'global',
+ Team: 'team',
+ Product: 'product'
+} as const;
+
+export type Scope = typeof Scope[keyof typeof Scope];
+
+
+/**
+ *
+ * @export
+ * @interface Selector
+ */
+export interface Selector {
+}
+/**
+ * An adjusted_status is set if a session is adjusted by the marketplace after the original return. A session can be adjusted multiple times. This is the most recent status. If a session was originally a complete, was adjusted to incomplete, then back to complete, the adjusted_status will be None, but the adjusted_timestamp will be set to the most recent change.
+ * @export
+ * @enum {string}
+ */
+
+export const SessionAdjustedStatus = {
+ Ac: 'ac',
+ Af: 'af',
+ Pa: 'pa'
+} as const;
+
+export type SessionAdjustedStatus = typeof SessionAdjustedStatus[keyof typeof SessionAdjustedStatus];
+
+
+/**
+ * Stores configuration related to the Session, a session being a users experience attempting to do work.
+ * @export
+ * @interface SessionConfig
+ */
+export interface SessionConfig {
+ /**
+ * The amount of time (in seconds) that a respondent may spend attempting to get into a survey within a session.If NULL, there is no limit.
+ * @type {number}
+ * @memberof SessionConfig
+ */
+ 'max_session_len'?: number;
+ /**
+ * The number of surveys that a respondent may attempt within a session before the session is terminated.
+ * @type {number}
+ * @memberof SessionConfig
+ */
+ 'max_session_hard_retry'?: number;
+ /**
+ * The minimum amount the user should be paid for a complete. If no payout transformation is defined, the value is based on the BP\'s payout. If a payout transformation is defined, the min_payout is applied on the user\'s payout. Note, this is separate and distinct from the payout transformation\'s min payout. The payout transformation\'s min_payout does not care what the task\'s actual payout was. This min_payout will prevent the user from being show any tasks that would pay below this amount.
+ * @type {string}
+ * @memberof SessionConfig
+ */
+ 'min_payout'?: string;
+}
+/**
+ *
+ * @export
+ * @interface SessionEnterPayload
+ */
+export interface SessionEnterPayload {
+ /**
+ *
+ * @type {string}
+ * @memberof SessionEnterPayload
+ */
+ 'event_type'?: SessionEnterPayloadEventTypeEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof SessionEnterPayload
+ */
+ 'country_iso': string;
+}
+
+export const SessionEnterPayloadEventTypeEnum = {
+ SessionEnter: 'session.enter'
+} as const;
+
+export type SessionEnterPayloadEventTypeEnum = typeof SessionEnterPayloadEventTypeEnum[keyof typeof SessionEnterPayloadEventTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface SessionFinishPayload
+ */
+export interface SessionFinishPayload {
+ /**
+ *
+ * @type {string}
+ * @memberof SessionFinishPayload
+ */
+ 'event_type'?: SessionFinishPayloadEventTypeEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof SessionFinishPayload
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {number}
+ * @memberof SessionFinishPayload
+ */
+ 'duration_sec': number;
+ /**
+ *
+ * @type {Status}
+ * @memberof SessionFinishPayload
+ */
+ 'status': Status;
+ /**
+ *
+ * @type {StatusCode1}
+ * @memberof SessionFinishPayload
+ */
+ 'status_code_1'?: StatusCode1 | null;
+ /**
+ *
+ * @type {SessionStatusCode2}
+ * @memberof SessionFinishPayload
+ */
+ 'status_code_2'?: SessionStatusCode2 | null;
+ /**
+ *
+ * @type {number}
+ * @memberof SessionFinishPayload
+ */
+ 'user_payout'?: number | null;
+}
+
+export const SessionFinishPayloadEventTypeEnum = {
+ SessionFinish: 'session.finish'
+} as const;
+
+export type SessionFinishPayloadEventTypeEnum = typeof SessionFinishPayloadEventTypeEnum[keyof typeof SessionFinishPayloadEventTypeEnum];
+
+/**
+ * __Status Detail__ This should be set if the Session.status_code_1 is SESSION_XXX_FAIL
+ * @export
+ * @enum {number}
+ */
+
+export const SessionStatusCode2 = {
+ NUMBER_1: 1,
+ NUMBER_2: 2,
+ NUMBER_3: 3,
+ NUMBER_4: 4,
+ NUMBER_5: 5,
+ NUMBER_6: 6,
+ NUMBER_7: 7,
+ NUMBER_8: 8,
+ NUMBER_9: 9,
+ NUMBER_10: 10,
+ NUMBER_11: 11,
+ NUMBER_12: 12,
+ NUMBER_13: 13
+} as const;
+
+export type SessionStatusCode2 = typeof SessionStatusCode2[keyof typeof SessionStatusCode2];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const ShippingCarrier = {
+ Usps: 'USPS',
+ FedEx: 'FedEx',
+ Ups: 'UPS',
+ Dhl: 'DHL'
+} as const;
+
+export type ShippingCarrier = typeof ShippingCarrier[keyof typeof ShippingCarrier];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const ShippingMethod = {
+ Standard: 'Standard',
+ Express: 'Express',
+ TwoDay: 'Two-Day',
+ Overnight: 'Overnight',
+ SameDay: 'Same Day'
+} as const;
+
+export type ShippingMethod = typeof ShippingMethod[keyof typeof ShippingMethod];
+
+
+/**
+ *
+ * @export
+ * @interface SingleEntryBucket
+ */
+export interface SingleEntryBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof SingleEntryBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof SingleEntryBucket
+ */
+ 'uri': string;
+}
+/**
+ * Only returns a single bucket with the top scoring tasks. Offerwall code: `5fl8bpv5`
+ * @export
+ * @interface SingleEntryOfferWall
+ */
+export interface SingleEntryOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof SingleEntryOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof SingleEntryOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof SingleEntryOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<SingleEntryBucket>}
+ * @memberof SingleEntryOfferWall
+ */
+ 'buckets'?: Array<SingleEntryBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof SingleEntryOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+ /**
+ * The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout = 100 (one dollar). - \"{payout*10:,.0f} Points\" -> \"1,000 Points\" - \"${payout/100:.2f}\" -> \"$1.00\"
+ * @type {string}
+ * @memberof SingleEntryOfferWall
+ */
+ 'payout_format': string;
+}
+/**
+ *
+ * @export
+ * @interface SingleEntryOfferWallResponse
+ */
+export interface SingleEntryOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof SingleEntryOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {SingleEntryOfferWall}
+ * @memberof SingleEntryOfferWallResponse
+ */
+ 'offerwall': SingleEntryOfferWall;
+}
+/**
+ *
+ * @export
+ * @interface SoftPairBucket
+ */
+export interface SoftPairBucket {
+ [key: string]: any;
+
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof SoftPairBucket
+ */
+ 'id': string;
+ /**
+ *
+ * @type {Uri}
+ * @memberof SoftPairBucket
+ */
+ 'uri': Uri;
+ /**
+ *
+ * @type {Array<CategoryAssociation>}
+ * @memberof SoftPairBucket
+ */
+ 'category'?: Array<CategoryAssociation>;
+ /**
+ *
+ * @type {Array<BucketTask>}
+ * @memberof SoftPairBucket
+ */
+ 'contents': Array<BucketTask>;
+ /**
+ *
+ * @type {string}
+ * @memberof SoftPairBucket
+ */
+ 'eligibility': SoftPairBucketEligibilityEnum;
+ /**
+ *
+ * @type {Array<string | null>}
+ * @memberof SoftPairBucket
+ */
+ 'missing_questions'?: Array<string | null>;
+ /**
+ * this is the max loi of the contents
+ * @type {number}
+ * @memberof SoftPairBucket
+ */
+ 'loi': number;
+ /**
+ * this is the min payout of the contents
+ * @type {number}
+ * @memberof SoftPairBucket
+ */
+ 'payout': number;
+}
+
+export const SoftPairBucketEligibilityEnum = {
+ Conditional: 'conditional',
+ Unconditional: 'unconditional',
+ Ineligible: 'ineligible'
+} as const;
+
+export type SoftPairBucketEligibilityEnum = typeof SoftPairBucketEligibilityEnum[keyof typeof SoftPairBucketEligibilityEnum];
+
+/**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. Offerwall code: `37d1da64`
+ * @export
+ * @interface SoftPairOfferwall
+ */
+export interface SoftPairOfferwall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof SoftPairOfferwall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof SoftPairOfferwall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof SoftPairOfferwall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<SoftPairBucket>}
+ * @memberof SoftPairOfferwall
+ */
+ 'buckets'?: Array<SoftPairBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof SoftPairOfferwall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+ /**
+ *
+ * @type {{ [key: string]: UpkQuestion; }}
+ * @memberof SoftPairOfferwall
+ */
+ 'question_info'?: { [key: string]: UpkQuestion; };
+}
+/**
+ *
+ * @export
+ * @interface SoftPairOfferwallResponse
+ */
+export interface SoftPairOfferwallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof SoftPairOfferwallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {SoftPairOfferwall}
+ * @memberof SoftPairOfferwallResponse
+ */
+ 'offerwall': SoftPairOfferwall;
+}
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const Source = {
+ G: 'g',
+ C: 'c',
+ A: 'a',
+ D: 'd',
+ Et: 'et',
+ F: 'f',
+ I: 'i',
+ L: 'l',
+ M: 'm',
+ N: 'n',
+ O: 'o',
+ E: 'e',
+ R: 'r',
+ Pr: 'pr',
+ P: 'p',
+ Rd: 'rd',
+ H: 'h',
+ S: 's',
+ T: 't',
+ U: 'u',
+ W: 'w'
+} as const;
+
+export type Source = typeof Source[keyof typeof Source];
+
+
+/**
+ * This could also be named \"BP:Marketplace Config\", as it describes the config for a BP on a single marketplace.
+ * @export
+ * @interface SourceConfig
+ */
+export interface SourceConfig {
+ /**
+ *
+ * @type {Source}
+ * @memberof SourceConfig
+ */
+ 'name': Source;
+ /**
+ *
+ * @type {boolean}
+ * @memberof SourceConfig
+ */
+ 'active'?: boolean;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof SourceConfig
+ */
+ 'banned_countries'?: Array<string>;
+ /**
+ *
+ * @type {boolean}
+ * @memberof SourceConfig
+ */
+ 'allow_mobile_ip'?: boolean;
+ /**
+ * Allow Tasks from Buyers that want traffic that comes from Suppliers that can identify their users. Only supported on Pure Spectrum.
+ * @type {boolean}
+ * @memberof SourceConfig
+ */
+ 'allow_pii_only_buyers'?: boolean;
+ /**
+ * Return Tasks from Buyers that don\'t have URL hashing enabled. Only supported on Pure Spectrum.
+ * @type {boolean}
+ * @memberof SourceConfig
+ */
+ 'allow_unhashed_buyers'?: boolean;
+ /**
+ * For some Products, we may have privacy agreements prohibiting us from sharing information with the inventorySource. If True, don\'t add MRPQ (Market Research ProfilingQuestion) onto the entry link.
+ * @type {boolean}
+ * @memberof SourceConfig
+ */
+ 'withhold_profiling'?: boolean;
+ /**
+ * Not used at the moment
+ * @type {boolean}
+ * @memberof SourceConfig
+ */
+ 'pass_unconditional_eligible_unknowns'?: boolean;
+}
+
+
+/**
+ *
+ * @export
+ * @interface SourcesConfig
+ */
+export interface SourcesConfig {
+ /**
+ *
+ * @type {Array<SourceConfig>}
+ * @memberof SourcesConfig
+ */
+ 'user_defined'?: Array<SourceConfig>;
+ /**
+ *
+ * @type {Array<SupplyPolicy>}
+ * @memberof SourcesConfig
+ */
+ 'policies'?: Array<SupplyPolicy>;
+}
+/**
+ * Retrieve sessions which were started after this timestamp. If `NULL`, default is 10 days ago.
+ * @export
+ * @interface StartedAfter
+ */
+export interface StartedAfter {
+}
+/**
+ * Retrieve sessions which were started before this timestamp. If `NULL`, default is now.
+ * @export
+ * @interface StartedBefore
+ */
+export interface StartedBefore {
+}
+/**
+ * An offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features. Offerwall code: `b59a2d2b`
+ * @export
+ * @interface StarwallOfferWall
+ */
+export interface StarwallOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof StarwallOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof StarwallOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof StarwallOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNBucket>}
+ * @memberof StarwallOfferWall
+ */
+ 'buckets'?: Array<TopNBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof StarwallOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+ /**
+ * The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout = 100 (one dollar). - \"{payout*10:,.0f} Points\" -> \"1,000 Points\" - \"${payout/100:.2f}\" -> \"$1.00\"
+ * @type {string}
+ * @memberof StarwallOfferWall
+ */
+ 'payout_format': string;
+}
+/**
+ *
+ * @export
+ * @interface StarwallOfferWallResponse
+ */
+export interface StarwallOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof StarwallOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {StarwallOfferWall}
+ * @memberof StarwallOfferWallResponse
+ */
+ 'offerwall': StarwallOfferWall;
+}
+/**
+ * Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked. Offerwall code: `7fa1b3f4`
+ * @export
+ * @interface StarwallPlusBlockOfferWall
+ */
+export interface StarwallPlusBlockOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof StarwallPlusBlockOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof StarwallPlusBlockOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof StarwallPlusBlockOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNPlusBucket>}
+ * @memberof StarwallPlusBlockOfferWall
+ */
+ 'buckets'?: Array<TopNPlusBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof StarwallPlusBlockOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface StarwallPlusBlockOfferWallResponse
+ */
+export interface StarwallPlusBlockOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof StarwallPlusBlockOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {StarwallPlusBlockOfferWall}
+ * @memberof StarwallPlusBlockOfferWallResponse
+ */
+ 'offerwall': StarwallPlusBlockOfferWall;
+}
+/**
+ * Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a recontact key. Offerwall code: `630db2a4`
+ * @export
+ * @interface StarwallPlusBlockRecontactOfferWall
+ */
+export interface StarwallPlusBlockRecontactOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof StarwallPlusBlockRecontactOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof StarwallPlusBlockRecontactOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof StarwallPlusBlockRecontactOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNPlusRecontactBucket>}
+ * @memberof StarwallPlusBlockRecontactOfferWall
+ */
+ 'buckets'?: Array<TopNPlusRecontactBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof StarwallPlusBlockRecontactOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface StarwallPlusBlockRecontactOfferWallResponse
+ */
+export interface StarwallPlusBlockRecontactOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof StarwallPlusBlockRecontactOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {StarwallPlusBlockRecontactOfferWall}
+ * @memberof StarwallPlusBlockRecontactOfferWallResponse
+ */
+ 'offerwall': StarwallPlusBlockRecontactOfferWall;
+}
+/**
+ * Same as the StarwallOfferWall, but the buckets include contents. Offerwall code: `5481f322`
+ * @export
+ * @interface StarwallPlusOfferWall
+ */
+export interface StarwallPlusOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof StarwallPlusOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof StarwallPlusOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof StarwallPlusOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNPlusBucket>}
+ * @memberof StarwallPlusOfferWall
+ */
+ 'buckets'?: Array<TopNPlusBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof StarwallPlusOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface StarwallPlusOfferWallResponse
+ */
+export interface StarwallPlusOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof StarwallPlusOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {StarwallPlusOfferWall}
+ * @memberof StarwallPlusOfferWallResponse
+ */
+ 'offerwall': StarwallPlusOfferWall;
+}
+/**
+ *
+ * @export
+ * @interface StatisticalSummaryStat
+ */
+export interface StatisticalSummaryStat {
+ /**
+ * The grouping criteria
+ * @type {{ [key: string]: FacetValue; }}
+ * @memberof StatisticalSummaryStat
+ */
+ 'facet': { [key: string]: FacetValue; };
+ /**
+ * Statistical Summary for the given metric and facet
+ * @type {StatisticalSummaryValue}
+ * @memberof StatisticalSummaryStat
+ */
+ 'value': StatisticalSummaryValue;
+}
+/**
+ *
+ * @export
+ * @interface StatisticalSummaryValue
+ */
+export interface StatisticalSummaryValue {
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'min': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'max': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'mean': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'q1': number;
+ /**
+ * equal to the median
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'q2': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'q3': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'lower_whisker': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatisticalSummaryValue
+ */
+ 'upper_whisker': number;
+}
+/**
+ *
+ * @export
+ * @interface StatsMessage
+ */
+export interface StatsMessage {
+ /**
+ *
+ * @type {string}
+ * @memberof StatsMessage
+ */
+ 'kind'?: StatsMessageKindEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof StatsMessage
+ */
+ 'timestamp'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof StatsMessage
+ */
+ 'country_iso'?: string | null;
+ /**
+ *
+ * @type {StatsSnapshot}
+ * @memberof StatsMessage
+ */
+ 'data': StatsSnapshot;
+}
+
+export const StatsMessageKindEnum = {
+ Stats: 'stats'
+} as const;
+
+export type StatsMessageKindEnum = typeof StatsMessageKindEnum[keyof typeof StatsMessageKindEnum];
+
+/**
+ *
+ * @export
+ * @interface StatsSnapshot
+ */
+export interface StatsSnapshot {
+ /**
+ *
+ * @type {AggregateBySource}
+ * @memberof StatsSnapshot
+ */
+ 'live_task_count'?: AggregateBySource;
+ /**
+ *
+ * @type {AggregateBySource}
+ * @memberof StatsSnapshot
+ */
+ 'task_created_count_last_1h'?: AggregateBySource;
+ /**
+ *
+ * @type {AggregateBySource}
+ * @memberof StatsSnapshot
+ */
+ 'task_created_count_last_24h'?: AggregateBySource;
+ /**
+ * In integer USDCents
+ * @type {MaxGaugeBySource}
+ * @memberof StatsSnapshot
+ */
+ 'live_tasks_max_payout'?: MaxGaugeBySource;
+ /**
+ *
+ * @type {string}
+ * @memberof StatsSnapshot
+ */
+ 'country_iso'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof StatsSnapshot
+ */
+ 'timestamp'?: string;
+ /**
+ * Count of users (in this product_id) that were active in the past 60 minutes. Behaviors that trigger active: - Request an offerwall - Enter an offerwall bucket - Request profiling questions - Submit profiling answers - Update user profile
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'active_users_last_1h'?: number;
+ /**
+ * Count of users (in this product_id) that were active in the past 24 hours.
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'active_users_last_24h'?: number;
+ /**
+ * Count of users that are currently doing work at this moment
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'in_progress_users': number;
+ /**
+ * Count of users created
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'signups_last_24h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_enters_last_1h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_enters_last_24h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_fails_last_1h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_fails_last_24h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_completes_last_1h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_completes_last_24h': number;
+ /**
+ * In integer USDCents
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'sum_payouts_last_1h': number;
+ /**
+ * In integer USDCents
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'sum_payouts_last_24h': number;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_avg_payout_last_24h': number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_avg_user_payout_last_24h': number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_fail_avg_loi_last_24h': number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof StatsSnapshot
+ */
+ 'session_complete_avg_loi_last_24h': number | null;
+}
+/**
+ * The outcome of a session or wall event. If the session is still in progress, the status will be NULL.
+ * @export
+ * @enum {string}
+ */
+
+export const Status = {
+ C: 'c',
+ F: 'f',
+ A: 'a',
+ T: 't'
+} as const;
+
+export type Status = typeof Status[keyof typeof Status];
+
+
+/**
+ * __High level status code for outcome of the session.__ This should only be NULL if the Status is ABANDON or TIMEOUT
+ * @export
+ * @enum {number}
+ */
+
+export const StatusCode1 = {
+ NUMBER_1: 1,
+ NUMBER_2: 2,
+ NUMBER_3: 3,
+ NUMBER_4: 4,
+ NUMBER_5: 5,
+ NUMBER_6: 6,
+ NUMBER_7: 7,
+ NUMBER_8: 8,
+ NUMBER_9: 9,
+ NUMBER_10: 10,
+ NUMBER_11: 11,
+ NUMBER_12: 12,
+ NUMBER_13: 13,
+ NUMBER_14: 14,
+ NUMBER_15: 15,
+ NUMBER_16: 16,
+ NUMBER_17: 17,
+ NUMBER_18: 18,
+ NUMBER_19: 19
+} as const;
+
+export type StatusCode1 = typeof StatusCode1[keyof typeof StatusCode1];
+
+
+/**
+ *
+ * @export
+ * @interface StatusInfoResponseFail
+ */
+export interface StatusInfoResponseFail {
+ /**
+ *
+ * @type {StatusSuccessFail}
+ * @memberof StatusInfoResponseFail
+ */
+ 'info': StatusSuccessFail;
+ /**
+ * An optional message, if success is False
+ * @type {string}
+ * @memberof StatusInfoResponseFail
+ */
+ 'msg': string;
+}
+/**
+ *
+ * @export
+ * @interface StatusResponse
+ */
+export interface StatusResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof StatusResponse
+ */
+ 'status': StatusResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof StatusResponse
+ */
+ 'msg'?: string | null;
+}
+
+export const StatusResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type StatusResponseStatusEnum = typeof StatusResponseStatusEnum[keyof typeof StatusResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface StatusResponseFailure
+ */
+export interface StatusResponseFailure {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof StatusResponseFailure
+ */
+ 'status': StatusResponseFailureStatusEnum;
+ /**
+ * An optional message, if the status is failure.
+ * @type {string}
+ * @memberof StatusResponseFailure
+ */
+ 'msg': string;
+}
+
+export const StatusResponseFailureStatusEnum = {
+ Failure: 'failure'
+} as const;
+
+export type StatusResponseFailureStatusEnum = typeof StatusResponseFailureStatusEnum[keyof typeof StatusResponseFailureStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface StatusSuccessFail
+ */
+export interface StatusSuccessFail {
+ /**
+ * Whether the API response is successful.
+ * @type {boolean}
+ * @memberof StatusSuccessFail
+ */
+ 'success'?: boolean;
+}
+/**
+ * What has to happen for a user to fulfill a period for a streak
+ * @export
+ * @enum {string}
+ */
+
+export const StreakFulfillment = {
+ Active: 'active',
+ Complete: 'complete'
+} as const;
+
+export type StreakFulfillment = typeof StreakFulfillment[keyof typeof StreakFulfillment];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const StreakPeriod = {
+ Day: 'day',
+ Week: 'week',
+ Month: 'month'
+} as const;
+
+export type StreakPeriod = typeof StreakPeriod[keyof typeof StreakPeriod];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const StreakState = {
+ Active: 'active',
+ AtRisk: 'at_risk',
+ Broken: 'broken'
+} as const;
+
+export type StreakState = typeof StreakState[keyof typeof StreakState];
+
+
+/**
+ *
+ * @export
+ * @interface SubscribeMessage
+ */
+export interface SubscribeMessage {
+ /**
+ *
+ * @type {string}
+ * @memberof SubscribeMessage
+ */
+ 'kind'?: SubscribeMessageKindEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof SubscribeMessage
+ */
+ 'product_id': string;
+}
+
+export const SubscribeMessageKindEnum = {
+ Subscribe: 'subscribe'
+} as const;
+
+export type SubscribeMessageKindEnum = typeof SubscribeMessageKindEnum[keyof typeof SubscribeMessageKindEnum];
+
+/**
+ * Available tags which can be used to annotate supplier traffic Note: should not include commas!
+ * @export
+ * @enum {string}
+ */
+
+export const SupplierTag = {
+ Mobile: 'mobile',
+ JsOfferwall: 'js-offerwall',
+ DoubleOptIn: 'double-opt-in',
+ SingleSignOn: 'single-sign-on',
+ PhoneNumberVerified: 'phone-number-verified',
+ TestA: 'test-a',
+ TestB: 'test-b'
+} as const;
+
+export type SupplierTag = typeof SupplierTag[keyof typeof SupplierTag];
+
+
+/**
+ * Describes the set of policies for how GRL can interact with marketplaces. This is only used on the special \"global product\".
+ * @export
+ * @interface SupplyConfig
+ */
+export interface SupplyConfig {
+ /**
+ *
+ * @type {Array<SupplyPolicy>}
+ * @memberof SupplyConfig
+ */
+ 'policies'?: Array<SupplyPolicy>;
+}
+/**
+ * One policy describing how GRL can interact with a marketplaces in a certain way. This is only used on the special \"global product\", and then internally in grpc logic.
+ * @export
+ * @interface SupplyPolicy
+ */
+export interface SupplyPolicy {
+ /**
+ *
+ * @type {Source}
+ * @memberof SupplyPolicy
+ */
+ 'name': Source;
+ /**
+ *
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'active'?: boolean;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof SupplyPolicy
+ */
+ 'banned_countries'?: Array<string>;
+ /**
+ *
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'allow_mobile_ip'?: boolean;
+ /**
+ * Allow Tasks from Buyers that want traffic that comes from Suppliers that can identify their users. Only supported on Pure Spectrum.
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'allow_pii_only_buyers'?: boolean;
+ /**
+ * Return Tasks from Buyers that don\'t have URL hashing enabled. Only supported on Pure Spectrum.
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'allow_unhashed_buyers'?: boolean;
+ /**
+ * For some Products, we may have privacy agreements prohibiting us from sharing information with the inventorySource. If True, don\'t add MRPQ (Market Research ProfilingQuestion) onto the entry link.
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'withhold_profiling'?: boolean;
+ /**
+ * Not used at the moment
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'pass_unconditional_eligible_unknowns'?: boolean;
+ /**
+ * address for the grpc GetOpps call
+ * @type {Array<string>}
+ * @memberof SupplyPolicy
+ */
+ 'address': Array<string>;
+ /**
+ *
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'allow_vpn'?: boolean;
+ /**
+ *
+ * @type {boolean}
+ * @memberof SupplyPolicy
+ */
+ 'distribute_harmonizer_active'?: boolean;
+ /**
+ *
+ * @type {string}
+ * @memberof SupplyPolicy
+ */
+ 'supplier_id'?: string | null;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof SupplyPolicy
+ */
+ 'team_ids'?: Array<string> | null;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof SupplyPolicy
+ */
+ 'product_ids'?: Array<string> | null;
+ /**
+ *
+ * @type {IntegrationMode}
+ * @memberof SupplyPolicy
+ */
+ 'integration_mode'?: IntegrationMode;
+ /**
+ * There must be only 1 GLOBAL config per Source. We can have more than one TEAM/PRODUCT config per Source.
+ * @type {Scope}
+ * @memberof SupplyPolicy
+ */
+ 'scope': Scope;
+}
+
+
+/**
+ * Explanatory record of which question answers contributed to a user\'s eligibility for a survey. This is INSUFFICIENT for determining eligibility to a task as it IGNORES logical operators, dependencies between criteria, and other requirements. It is only intended for the UI.
+ * @export
+ * @interface SurveyEligibilityCriterion
+ */
+export interface SurveyEligibilityCriterion {
+ /**
+ *
+ * @type {string}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'question_id': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'property_code': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'question_text': string;
+ /**
+ * User answer(s) that satisfied at least one eligibility rule
+ * @type {Array<string>}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'qualifying_answer': Array<string>;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'qualifying_answer_label': Array<string> | null;
+ /**
+ *
+ * @type {string}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'explanation'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof SurveyEligibilityCriterion
+ */
+ 'rank'?: number | null;
+}
+/**
+ *
+ * @export
+ * @interface SurveyId
+ */
+export interface SurveyId {
+}
+/**
+ *
+ * @export
+ * @interface TangoCashoutMethodData
+ */
+export interface TangoCashoutMethodData {
+ /**
+ *
+ * @type {string}
+ * @memberof TangoCashoutMethodData
+ */
+ 'type'?: TangoCashoutMethodDataTypeEnum;
+ /**
+ * tango utid
+ * @type {string}
+ * @memberof TangoCashoutMethodData
+ */
+ 'utid': string;
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof TangoCashoutMethodData
+ */
+ 'countries': Array<string>;
+ /**
+ *
+ * @type {string}
+ * @memberof TangoCashoutMethodData
+ */
+ 'value_type': TangoCashoutMethodDataValueTypeEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof TangoCashoutMethodData
+ */
+ 'disclaimer'?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof TangoCashoutMethodData
+ */
+ 'terms'?: string;
+}
+
+export const TangoCashoutMethodDataTypeEnum = {
+ Tango: 'TANGO'
+} as const;
+
+export type TangoCashoutMethodDataTypeEnum = typeof TangoCashoutMethodDataTypeEnum[keyof typeof TangoCashoutMethodDataTypeEnum];
+export const TangoCashoutMethodDataValueTypeEnum = {
+ Variable: 'variable',
+ Fixed: 'fixed'
+} as const;
+
+export type TangoCashoutMethodDataValueTypeEnum = typeof TangoCashoutMethodDataValueTypeEnum[keyof typeof TangoCashoutMethodDataValueTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface TaskEnterPayload
+ */
+export interface TaskEnterPayload {
+ /**
+ *
+ * @type {string}
+ * @memberof TaskEnterPayload
+ */
+ 'event_type'?: TaskEnterPayloadEventTypeEnum;
+ /**
+ *
+ * @type {Source}
+ * @memberof TaskEnterPayload
+ */
+ 'source': Source;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskEnterPayload
+ */
+ 'survey_id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskEnterPayload
+ */
+ 'quota_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskEnterPayload
+ */
+ 'country_iso': string;
+}
+
+export const TaskEnterPayloadEventTypeEnum = {
+ TaskEnter: 'task.enter'
+} as const;
+
+export type TaskEnterPayloadEventTypeEnum = typeof TaskEnterPayloadEventTypeEnum[keyof typeof TaskEnterPayloadEventTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface TaskFinishPayload
+ */
+export interface TaskFinishPayload {
+ /**
+ *
+ * @type {string}
+ * @memberof TaskFinishPayload
+ */
+ 'event_type'?: TaskFinishPayloadEventTypeEnum;
+ /**
+ *
+ * @type {Source}
+ * @memberof TaskFinishPayload
+ */
+ 'source': Source;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskFinishPayload
+ */
+ 'survey_id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskFinishPayload
+ */
+ 'quota_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskFinishPayload
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {number}
+ * @memberof TaskFinishPayload
+ */
+ 'duration_sec': number;
+ /**
+ *
+ * @type {Status}
+ * @memberof TaskFinishPayload
+ */
+ 'status': Status;
+ /**
+ *
+ * @type {StatusCode1}
+ * @memberof TaskFinishPayload
+ */
+ 'status_code_1'?: StatusCode1 | null;
+ /**
+ *
+ * @type {WallStatusCode2}
+ * @memberof TaskFinishPayload
+ */
+ 'status_code_2'?: WallStatusCode2 | null;
+ /**
+ *
+ * @type {number}
+ * @memberof TaskFinishPayload
+ */
+ 'cpi'?: number | null;
+}
+
+export const TaskFinishPayloadEventTypeEnum = {
+ TaskFinish: 'task.finish'
+} as const;
+
+export type TaskFinishPayloadEventTypeEnum = typeof TaskFinishPayloadEventTypeEnum[keyof typeof TaskFinishPayloadEventTypeEnum];
+
+/**
+ * The status of a session
+ * @export
+ * @interface TaskStatusResponse
+ */
+export interface TaskStatusResponse {
+ /**
+ * A unique identifier for the session
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'tsid': string;
+ /**
+ * The BP ID of the associated respondent
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'product_id': string;
+ /**
+ * A unique identifier for each user, which is set by the Supplier
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'product_user_id': string;
+ /**
+ * When the session was started
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'started': string;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'finished'?: string | null;
+ /**
+ * The outcome of a session. - 0 - UNKNOWN - 1 - ENTER (the user has not yet returned) - 2 - INCOMPLETE (the user failed) - 3 - COMPLETE (the user completed the task)
+ * @type {number}
+ * @memberof TaskStatusResponse
+ */
+ 'status'?: number;
+ /**
+ *
+ * @type {number}
+ * @memberof TaskStatusResponse
+ */
+ 'payout'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof TaskStatusResponse
+ */
+ 'user_payout'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'payout_format'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'user_payout_string'?: string | null;
+ /**
+ * Any extra url params used in the offerwall request will be passed back here
+ * @type {{ [key: string]: string; }}
+ * @memberof TaskStatusResponse
+ */
+ 'kwargs'?: { [key: string]: string; };
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'status_code_1'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'status_code_2'?: string | null;
+ /**
+ *
+ * @type {SessionAdjustedStatus}
+ * @memberof TaskStatusResponse
+ */
+ 'adjusted_status'?: SessionAdjustedStatus | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'adjusted_timestamp'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof TaskStatusResponse
+ */
+ 'adjusted_payout'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof TaskStatusResponse
+ */
+ 'adjusted_user_payout'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'adjusted_user_payout_string'?: string | null;
+ /**
+ *
+ * @type {Array<WallOut>}
+ * @memberof TaskStatusResponse
+ */
+ 'wall_events'?: Array<WallOut> | null;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'currency'?: TaskStatusResponseCurrencyEnum;
+ /**
+ * This is deprecated
+ * @type {number}
+ * @memberof TaskStatusResponse
+ */
+ 'final_status'?: number;
+ /**
+ *
+ * @type {string}
+ * @memberof TaskStatusResponse
+ */
+ 'bpuid': string;
+}
+
+export const TaskStatusResponseCurrencyEnum = {
+ Usd: 'USD'
+} as const;
+
+export type TaskStatusResponseCurrencyEnum = typeof TaskStatusResponseCurrencyEnum[keyof typeof TaskStatusResponseCurrencyEnum];
+
+/**
+ *
+ * @export
+ * @interface TasksStatusResponse
+ */
+export interface TasksStatusResponse {
+ /**
+ * Page number
+ * @type {number}
+ * @memberof TasksStatusResponse
+ */
+ 'page'?: number;
+ /**
+ * Page size
+ * @type {number}
+ * @memberof TasksStatusResponse
+ */
+ 'size'?: number;
+ /**
+ *
+ * @type {number}
+ * @memberof TasksStatusResponse
+ */
+ 'total'?: number | null;
+ /**
+ *
+ * @type {Array<TaskStatusResponse>}
+ * @memberof TasksStatusResponse
+ */
+ 'tasks_status'?: Array<TaskStatusResponse>;
+ /**
+ *
+ * @type {number}
+ * @memberof TasksStatusResponse
+ */
+ 'pages': number | null;
+}
+/**
+ *
+ * @export
+ * @interface TopNBucket
+ */
+export interface TopNBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof TopNBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof TopNBucket
+ */
+ 'uri': string;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the x-axis.
+ * @type {number}
+ * @memberof TopNBucket
+ */
+ 'x'?: number;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the y-axis.
+ * @type {number}
+ * @memberof TopNBucket
+ */
+ 'y'?: number;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof TopNBucket
+ */
+ 'name'?: string;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof TopNBucket
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {Array<CategoryAssociation>}
+ * @memberof TopNBucket
+ */
+ 'category'?: Array<CategoryAssociation>;
+ /**
+ *
+ * @type {DurationSummary}
+ * @memberof TopNBucket
+ */
+ 'duration': DurationSummary;
+ /**
+ *
+ * @type {PayoutSummary}
+ * @memberof TopNBucket
+ */
+ 'payout': PayoutSummary;
+ /**
+ * A proprietary score to determine the overall quality of the tasks that are within the bucket. Higher is better.
+ * @type {number}
+ * @memberof TopNBucket
+ */
+ 'quality_score': number;
+}
+/**
+ * An offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering. Offerwall code: `45b7228a7`
+ * @export
+ * @interface TopNOfferWall
+ */
+export interface TopNOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof TopNOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof TopNOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof TopNOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNBucket>}
+ * @memberof TopNOfferWall
+ */
+ 'buckets'?: Array<TopNBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof TopNOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+ /**
+ * The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout = 100 (one dollar). - \"{payout*10:,.0f} Points\" -> \"1,000 Points\" - \"${payout/100:.2f}\" -> \"$1.00\"
+ * @type {string}
+ * @memberof TopNOfferWall
+ */
+ 'payout_format': string;
+}
+/**
+ *
+ * @export
+ * @interface TopNOfferWallResponse
+ */
+export interface TopNOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof TopNOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {TopNOfferWall}
+ * @memberof TopNOfferWallResponse
+ */
+ 'offerwall': TopNOfferWall;
+}
+/**
+ * Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked. Offerwall code: `d48cce47`
+ * @export
+ * @interface TopNPlusBlockOfferWall
+ */
+export interface TopNPlusBlockOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof TopNPlusBlockOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof TopNPlusBlockOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof TopNPlusBlockOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNPlusBucket>}
+ * @memberof TopNPlusBlockOfferWall
+ */
+ 'buckets'?: Array<TopNPlusBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof TopNPlusBlockOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface TopNPlusBlockOfferWallResponse
+ */
+export interface TopNPlusBlockOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof TopNPlusBlockOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {TopNPlusBlockOfferWall}
+ * @memberof TopNPlusBlockOfferWallResponse
+ */
+ 'offerwall': TopNPlusBlockOfferWall;
+}
+/**
+ * Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key. Offerwall code: `1e5f0af8`
+ * @export
+ * @interface TopNPlusBlockRecontactOfferWall
+ */
+export interface TopNPlusBlockRecontactOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof TopNPlusBlockRecontactOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof TopNPlusBlockRecontactOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof TopNPlusBlockRecontactOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNPlusRecontactBucket>}
+ * @memberof TopNPlusBlockRecontactOfferWall
+ */
+ 'buckets'?: Array<TopNPlusRecontactBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof TopNPlusBlockRecontactOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface TopNPlusBlockRecontactOfferWallResponse
+ */
+export interface TopNPlusBlockRecontactOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof TopNPlusBlockRecontactOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {TopNPlusBlockRecontactOfferWall}
+ * @memberof TopNPlusBlockRecontactOfferWallResponse
+ */
+ 'offerwall': TopNPlusBlockRecontactOfferWall;
+}
+/**
+ *
+ * @export
+ * @interface TopNPlusBucket
+ */
+export interface TopNPlusBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof TopNPlusBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof TopNPlusBucket
+ */
+ 'uri': string;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the x-axis.
+ * @type {number}
+ * @memberof TopNPlusBucket
+ */
+ 'x'?: number;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the y-axis.
+ * @type {number}
+ * @memberof TopNPlusBucket
+ */
+ 'y'?: number;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof TopNPlusBucket
+ */
+ 'name'?: string;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof TopNPlusBucket
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {Array<CategoryAssociation>}
+ * @memberof TopNPlusBucket
+ */
+ 'category'?: Array<CategoryAssociation>;
+ /**
+ *
+ * @type {Array<BucketTask>}
+ * @memberof TopNPlusBucket
+ */
+ 'contents': Array<BucketTask>;
+ /**
+ *
+ * @type {DurationSummary}
+ * @memberof TopNPlusBucket
+ */
+ 'duration': DurationSummary;
+ /**
+ *
+ * @type {PayoutSummary}
+ * @memberof TopNPlusBucket
+ */
+ 'payout': PayoutSummary;
+ /**
+ *
+ * @type {number}
+ * @memberof TopNPlusBucket
+ */
+ 'quality_score': number;
+ /**
+ * This will always be \'USD\'
+ * @type {string}
+ * @memberof TopNPlusBucket
+ */
+ 'currency'?: string;
+ /**
+ * The reasons the user is eligible for tasks in this bucket
+ * @type {Array<SurveyEligibilityCriterion>}
+ * @memberof TopNPlusBucket
+ */
+ 'eligibility_criteria'?: Array<SurveyEligibilityCriterion>;
+ /**
+ *
+ * @type {string}
+ * @memberof TopNPlusBucket
+ */
+ 'eligibility_explanation'?: string | null;
+}
+/**
+ * Same as the TopNOfferWall, but the buckets include contents. Offerwall code: `b145b803`
+ * @export
+ * @interface TopNPlusOfferWall
+ */
+export interface TopNPlusOfferWall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof TopNPlusOfferWall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof TopNPlusOfferWall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof TopNPlusOfferWall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<TopNPlusBucket>}
+ * @memberof TopNPlusOfferWall
+ */
+ 'buckets'?: Array<TopNPlusBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof TopNPlusOfferWall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface TopNPlusOfferWallResponse
+ */
+export interface TopNPlusOfferWallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof TopNPlusOfferWallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {TopNPlusOfferWall}
+ * @memberof TopNPlusOfferWallResponse
+ */
+ 'offerwall': TopNPlusOfferWall;
+}
+/**
+ *
+ * @export
+ * @interface TopNPlusRecontactBucket
+ */
+export interface TopNPlusRecontactBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'uri': string;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the x-axis.
+ * @type {number}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'x'?: number;
+ /**
+ * For UI. Provides a dimensionality position for the bucket on the y-axis.
+ * @type {number}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'y'?: number;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'name'?: string;
+ /**
+ * Currently unused. Will always return empty string
+ * @type {string}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'description'?: string;
+ /**
+ *
+ * @type {Array<CategoryAssociation>}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'category'?: Array<CategoryAssociation>;
+ /**
+ *
+ * @type {Array<BucketTask>}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'contents': Array<BucketTask>;
+ /**
+ *
+ * @type {DurationSummary}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'duration': DurationSummary;
+ /**
+ *
+ * @type {PayoutSummary}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'payout': PayoutSummary;
+ /**
+ *
+ * @type {number}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'quality_score': number;
+ /**
+ *
+ * @type {boolean}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'is_recontact': boolean;
+ /**
+ * This will always be \'USD\'
+ * @type {string}
+ * @memberof TopNPlusRecontactBucket
+ */
+ 'currency'?: string;
+}
+/**
+ *
+ * @export
+ * @interface UPKImportance
+ */
+export interface UPKImportance {
+ /**
+ *
+ * @type {number}
+ * @memberof UPKImportance
+ */
+ 'task_count'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UPKImportance
+ */
+ 'task_score'?: number | null;
+ /**
+ *
+ * @type {{ [key: string]: number; }}
+ * @memberof UPKImportance
+ */
+ 'marketplace_task_count'?: { [key: string]: number; } | null;
+}
+/**
+ *
+ * @export
+ * @interface USDeliveryAddress
+ */
+export interface USDeliveryAddress {
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'name_or_attn': string;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'company'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'phone_number'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'address': string;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'city': string;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'state': string;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'postal_code': string;
+ /**
+ *
+ * @type {string}
+ * @memberof USDeliveryAddress
+ */
+ 'country'?: string;
+}
+/**
+ *
+ * @export
+ * @interface UpkItem
+ */
+export interface UpkItem {
+ /**
+ *
+ * @type {string}
+ * @memberof UpkItem
+ */
+ 'id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkItem
+ */
+ 'label': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkItem
+ */
+ 'description'?: string | null;
+}
+/**
+ * This used to be called \"QuestionInfo\", which is a bad name, as this describes a UPK Property, like \"educational_attainment\", not the question that asks for your education.
+ * @export
+ * @interface UpkProperty
+ */
+export interface UpkProperty {
+ /**
+ *
+ * @type {string}
+ * @memberof UpkProperty
+ */
+ 'property_id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkProperty
+ */
+ 'property_label': string;
+ /**
+ * Allowed values: - __i__ *(UPK_ITEM)*: UserProfileKnowledge Item - __n__ *(UPK_NUMERICAL)*: UserProfileKnowledge Numerical - __x__ *(UPK_TEXT)*: UserProfileKnowledge Text
+ * @type {PropertyType}
+ * @memberof UpkProperty
+ */
+ 'prop_type'?: PropertyType;
+ /**
+ * Allowed values: - __*__ *(ZERO_OR_MORE)*: Zero or More - __?__ *(ZERO_OR_ONE)*: Zero or One
+ * @type {Cardinality}
+ * @memberof UpkProperty
+ */
+ 'cardinality'?: Cardinality;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkProperty
+ */
+ 'country_iso': string;
+ /**
+ * A Gold-Standard question has been enumerated for all possible values (per country) as best as possible by GRL,allowing it to be mapped across inventory sources. A property not marked as Gold-Standard may have: 1) marketplace qid associations & 2) category associations, but doesn\'t have a defined \'range\' (list of allowed itemsin a multiple choice question). This is used for exposing a user\'s profiling data & forthe Nudge API.
+ * @type {boolean}
+ * @memberof UpkProperty
+ */
+ 'gold_standard'?: boolean;
+ /**
+ *
+ * @type {Array<UpkItem>}
+ * @memberof UpkProperty
+ */
+ 'allowed_items'?: Array<UpkItem> | null;
+ /**
+ *
+ * @type {Array<Category>}
+ * @memberof UpkProperty
+ */
+ 'categories'?: Array<Category>;
+}
+
+
+/**
+ *
+ * @export
+ * @interface UpkQuestion
+ */
+export interface UpkQuestion {
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'question_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'ext_question_id'?: string | null;
+ /**
+ *
+ * @type {UpkQuestionType}
+ * @memberof UpkQuestion
+ */
+ 'question_type': UpkQuestionType;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'language_iso': string;
+ /**
+ * The text shown to respondents
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'question_text': string;
+ /**
+ *
+ * @type {Array<UpkQuestionChoice>}
+ * @memberof UpkQuestion
+ */
+ 'choices'?: Array<UpkQuestionChoice> | null;
+ /**
+ *
+ * @type {Selector}
+ * @memberof UpkQuestion
+ */
+ 'selector'?: Selector;
+ /**
+ *
+ * @type {UpkQuestionConfiguration}
+ * @memberof UpkQuestion
+ */
+ 'configuration'?: UpkQuestionConfiguration | null;
+ /**
+ *
+ * @type {UpkQuestionValidation}
+ * @memberof UpkQuestion
+ */
+ 'validation'?: UpkQuestionValidation | null;
+ /**
+ *
+ * @type {UPKImportance}
+ * @memberof UpkQuestion
+ */
+ 'importance'?: UPKImportance | null;
+ /**
+ * Categories associated with this question
+ * @type {Array<Category>}
+ * @memberof UpkQuestion
+ */
+ 'categories'?: Array<Category>;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'explanation_template'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestion
+ */
+ 'explanation_fragment_template'?: string | null;
+}
+
+
+/**
+ *
+ * @export
+ * @interface UpkQuestionChoice
+ */
+export interface UpkQuestionChoice {
+ /**
+ * The unique identifier for a response to a qualification
+ * @type {string}
+ * @memberof UpkQuestionChoice
+ */
+ 'choice_id': string;
+ /**
+ * The response text shown to respondents
+ * @type {string}
+ * @memberof UpkQuestionChoice
+ */
+ 'choice_text': string;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionChoice
+ */
+ 'order': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionChoice
+ */
+ 'group'?: number | null;
+ /**
+ * If answer is exclusive, it can be the only option selected
+ * @type {boolean}
+ * @memberof UpkQuestionChoice
+ */
+ 'exclusive'?: boolean;
+ /**
+ *
+ * @type {UPKImportance}
+ * @memberof UpkQuestionChoice
+ */
+ 'importance'?: UPKImportance | null;
+}
+/**
+ *
+ * @export
+ * @interface UpkQuestionChoiceOut
+ */
+export interface UpkQuestionChoiceOut {
+ /**
+ * The unique identifier for a response to a qualification
+ * @type {string}
+ * @memberof UpkQuestionChoiceOut
+ */
+ 'choice_id': string;
+ /**
+ * The response text shown to respondents
+ * @type {string}
+ * @memberof UpkQuestionChoiceOut
+ */
+ 'choice_text': string;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionChoiceOut
+ */
+ 'order': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionChoiceOut
+ */
+ 'group'?: number | null;
+ /**
+ * If answer is exclusive, it can be the only option selected
+ * @type {boolean}
+ * @memberof UpkQuestionChoiceOut
+ */
+ 'exclusive'?: boolean;
+ /**
+ *
+ * @type {UPKImportance}
+ * @memberof UpkQuestionChoiceOut
+ */
+ 'importance'?: UPKImportance | null;
+}
+/**
+ * @type UpkQuestionConfiguration
+ * @export
+ */
+export type UpkQuestionConfiguration = { type: 'MC' } & UpkQuestionConfigurationMC | { type: 'SLIDER' } & UpkQuestionConfigurationSLIDER | { type: 'TE' } & UpkQuestionConfigurationTE;
+
+/**
+ *
+ * @export
+ * @interface UpkQuestionConfigurationMC
+ */
+export interface UpkQuestionConfigurationMC {
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationMC
+ */
+ 'max_select'?: number | null;
+}
+/**
+ *
+ * @export
+ * @interface UpkQuestionConfigurationSLIDER
+ */
+export interface UpkQuestionConfigurationSLIDER {
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationSLIDER
+ */
+ 'slider_min'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationSLIDER
+ */
+ 'slider_max'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationSLIDER
+ */
+ 'slider_start'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationSLIDER
+ */
+ 'slider_step'?: number | null;
+}
+/**
+ *
+ * @export
+ * @interface UpkQuestionConfigurationTE
+ */
+export interface UpkQuestionConfigurationTE {
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationTE
+ */
+ 'max_length'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionConfigurationTE
+ */
+ 'min_length'?: number | null;
+}
+/**
+ *
+ * @export
+ * @interface UpkQuestionOut
+ */
+export interface UpkQuestionOut {
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'question_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'ext_question_id'?: string | null;
+ /**
+ *
+ * @type {UpkQuestionType}
+ * @memberof UpkQuestionOut
+ */
+ 'question_type': UpkQuestionType;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'language_iso': string;
+ /**
+ * The text shown to respondents
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'question_text': string;
+ /**
+ *
+ * @type {Array<UpkQuestionChoiceOut>}
+ * @memberof UpkQuestionOut
+ */
+ 'choices'?: Array<UpkQuestionChoiceOut> | null;
+ /**
+ *
+ * @type {Selector}
+ * @memberof UpkQuestionOut
+ */
+ 'selector'?: Selector;
+ /**
+ *
+ * @type {UpkQuestionConfiguration}
+ * @memberof UpkQuestionOut
+ */
+ 'configuration'?: UpkQuestionConfiguration | null;
+ /**
+ *
+ * @type {UpkQuestionValidation}
+ * @memberof UpkQuestionOut
+ */
+ 'validation'?: UpkQuestionValidation | null;
+ /**
+ *
+ * @type {UPKImportance}
+ * @memberof UpkQuestionOut
+ */
+ 'importance'?: UPKImportance | null;
+ /**
+ * Categories associated with this question
+ * @type {Array<Category>}
+ * @memberof UpkQuestionOut
+ */
+ 'categories'?: Array<Category>;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'explanation_template'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionOut
+ */
+ 'explanation_fragment_template'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionOut
+ */
+ 'task_count'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UpkQuestionOut
+ */
+ 'task_score'?: number | null;
+ /**
+ *
+ * @type {{ [key: string]: number; }}
+ * @memberof UpkQuestionOut
+ */
+ 'marketplace_task_count'?: { [key: string]: number; } | null;
+}
+
+
+/**
+ *
+ * @export
+ * @interface UpkQuestionResponse
+ */
+export interface UpkQuestionResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof UpkQuestionResponse
+ */
+ 'status': UpkQuestionResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UpkQuestionResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {Array<UpkQuestionOut>}
+ * @memberof UpkQuestionResponse
+ */
+ 'questions': Array<UpkQuestionOut>;
+ /**
+ * For internal use
+ * @type {Array<object | null>}
+ * @memberof UpkQuestionResponse
+ */
+ 'consent_questions'?: Array<object | null>;
+ /**
+ * For internal use
+ * @type {Array<object | null>}
+ * @memberof UpkQuestionResponse
+ */
+ 'special_questions'?: Array<object | null>;
+ /**
+ * The number of questions returned
+ * @type {number}
+ * @memberof UpkQuestionResponse
+ */
+ 'count': number;
+}
+
+export const UpkQuestionResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type UpkQuestionResponseStatusEnum = typeof UpkQuestionResponseStatusEnum[keyof typeof UpkQuestionResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const UpkQuestionSelectorHIDDEN = {
+ Hidden: 'HIDDEN'
+} as const;
+
+export type UpkQuestionSelectorHIDDEN = typeof UpkQuestionSelectorHIDDEN[keyof typeof UpkQuestionSelectorHIDDEN];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const UpkQuestionSelectorMC = {
+ Sa: 'SA',
+ Ma: 'MA',
+ Dl: 'DL',
+ Sb: 'SB',
+ Msb: 'MSB'
+} as const;
+
+export type UpkQuestionSelectorMC = typeof UpkQuestionSelectorMC[keyof typeof UpkQuestionSelectorMC];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const UpkQuestionSelectorSLIDER = {
+ Hslider: 'HSLIDER',
+ Vslider: 'VSLIDER'
+} as const;
+
+export type UpkQuestionSelectorSLIDER = typeof UpkQuestionSelectorSLIDER[keyof typeof UpkQuestionSelectorSLIDER];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const UpkQuestionSelectorTE = {
+ Sl: 'SL',
+ Ml: 'ML',
+ Etb: 'ETB'
+} as const;
+
+export type UpkQuestionSelectorTE = typeof UpkQuestionSelectorTE[keyof typeof UpkQuestionSelectorTE];
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const UpkQuestionType = {
+ Mc: 'MC',
+ Te: 'TE',
+ Slider: 'SLIDER',
+ Hidden: 'HIDDEN'
+} as const;
+
+export type UpkQuestionType = typeof UpkQuestionType[keyof typeof UpkQuestionType];
+
+
+/**
+ *
+ * @export
+ * @interface UpkQuestionValidation
+ */
+export interface UpkQuestionValidation {
+ /**
+ *
+ * @type {Array<PatternValidation>}
+ * @memberof UpkQuestionValidation
+ */
+ 'patterns': Array<PatternValidation> | null;
+}
+/**
+ * The URL to send a respondent into. Must not edit this URL in any way. If the eligibility is conditional or ineligible, the uri will be null.
+ * @export
+ * @interface Uri
+ */
+export interface Uri {
+}
+/**
+ *
+ * @export
+ * @interface User
+ */
+export interface User {
+ /**
+ *
+ * @type {number}
+ * @memberof User
+ */
+ 'id'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof User
+ */
+ 'uuid'?: string | null;
+ /**
+ *
+ * @type {Product}
+ * @memberof User
+ */
+ 'product'?: Product | null;
+ /**
+ *
+ * @type {string}
+ * @memberof User
+ */
+ 'product_id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof User
+ */
+ 'product_user_id'?: string | null;
+ /**
+ *
+ * @type {boolean}
+ * @memberof User
+ */
+ 'blocked'?: boolean | null;
+ /**
+ *
+ * @type {string}
+ * @memberof User
+ */
+ 'created'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof User
+ */
+ 'last_seen'?: string | null;
+ /**
+ *
+ * @type {Array<AuditLog>}
+ * @memberof User
+ */
+ 'audit_log'?: Array<AuditLog> | null;
+ /**
+ *
+ * @type {Array<LedgerTransaction>}
+ * @memberof User
+ */
+ 'transactions'?: Array<LedgerTransaction> | null;
+ /**
+ *
+ * @type {Array<GeoIPInformation>}
+ * @memberof User
+ */
+ 'location_history'?: Array<GeoIPInformation> | null;
+}
+/**
+ * The total amount this user has entered
+ * @export
+ * @interface UserAmount
+ */
+export interface UserAmount {
+}
+/**
+ * The total amount this user has entered in the past 24 hours
+ * @export
+ * @interface UserAmountToday
+ */
+export interface UserAmountToday {
+}
+/**
+ * If a payout transformation is configured on this account, this is the amount to display to the user
+ * @export
+ * @interface UserCpiString
+ */
+export interface UserCpiString {
+}
+/**
+ * Stores configuration for the user creation experience. The user creation limit is determined dynamically based on the median daily completion rate. min_hourly_create_limit & max_hourly_create_limit can be used to constrain the dynamically determined rate limit within set values.
+ * @export
+ * @interface UserCreateConfig
+ */
+export interface UserCreateConfig {
+ /**
+ * The smallest allowed value for the hourly user create limit.
+ * @type {number}
+ * @memberof UserCreateConfig
+ */
+ 'min_hourly_create_limit'?: number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserCreateConfig
+ */
+ 'max_hourly_create_limit'?: number | null;
+}
+/**
+ *
+ * @export
+ * @interface UserHealthConfig
+ */
+export interface UserHealthConfig {
+ /**
+ *
+ * @type {Array<string>}
+ * @memberof UserHealthConfig
+ */
+ 'banned_countries'?: Array<string>;
+ /**
+ *
+ * @type {boolean}
+ * @memberof UserHealthConfig
+ */
+ 'allow_ban_iphist'?: boolean;
+}
+/**
+ *
+ * @export
+ * @interface UserInfo
+ */
+export interface UserInfo {
+ /**
+ *
+ * @type {Array<UserProfileKnowledge>}
+ * @memberof UserInfo
+ */
+ 'user_profile_knowledge'?: Array<UserProfileKnowledge>;
+ /**
+ *
+ * @type {Array<MarketProfileKnowledge>}
+ * @memberof UserInfo
+ */
+ 'marketplace_profile_knowledge'?: Array<MarketProfileKnowledge>;
+}
+/**
+ *
+ * @export
+ * @interface UserInfoResponse
+ */
+export interface UserInfoResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof UserInfoResponse
+ */
+ 'status': UserInfoResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UserInfoResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {UserInfo}
+ * @memberof UserInfoResponse
+ */
+ 'user_profile': UserInfo;
+}
+
+export const UserInfoResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type UserInfoResponseStatusEnum = typeof UserInfoResponseStatusEnum[keyof typeof UserInfoResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface UserLedgerTransactionTaskAdjustment
+ */
+export interface UserLedgerTransactionTaskAdjustment {
+ /**
+ * When the Transaction was created
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'created': string;
+ /**
+ * External description suitable for UI
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'description'?: string;
+ /**
+ * The net amount affecting the user\'s wallet, in USDCents. Positive means the user\'s balance increased; negative means it decreased.
+ * @type {number}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'amount': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'balance_after'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'tx_type'?: UserLedgerTransactionTaskAdjustmentTxTypeEnum;
+ /**
+ * A unique identifier for the session
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'tsid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'url': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskAdjustment
+ */
+ 'amount_string': string | null;
+}
+
+export const UserLedgerTransactionTaskAdjustmentTxTypeEnum = {
+ BpAdjustment: 'bp_adjustment'
+} as const;
+
+export type UserLedgerTransactionTaskAdjustmentTxTypeEnum = typeof UserLedgerTransactionTaskAdjustmentTxTypeEnum[keyof typeof UserLedgerTransactionTaskAdjustmentTxTypeEnum];
+
+/**
+ * In a BP with user wallet enabled, the task-complete transaction would have line items for both the credit to the bp_wallet_account and credit to user_account. This is the user-detail, so we\'ve only caring about the user\'s payment.
+ * @export
+ * @interface UserLedgerTransactionTaskComplete
+ */
+export interface UserLedgerTransactionTaskComplete {
+ /**
+ * When the Transaction was created
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'created': string;
+ /**
+ * External description suitable for UI
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'description'?: string;
+ /**
+ * The net amount affecting the user\'s wallet, in USDCents. Positive means the user\'s balance increased; negative means it decreased.
+ * @type {number}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'amount': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'balance_after'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'tx_type'?: UserLedgerTransactionTaskCompleteTxTypeEnum;
+ /**
+ * A unique identifier for the session
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'tsid': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'url': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionTaskComplete
+ */
+ 'amount_string': string | null;
+}
+
+export const UserLedgerTransactionTaskCompleteTxTypeEnum = {
+ BpPayment: 'bp_payment'
+} as const;
+
+export type UserLedgerTransactionTaskCompleteTxTypeEnum = typeof UserLedgerTransactionTaskCompleteTxTypeEnum[keyof typeof UserLedgerTransactionTaskCompleteTxTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface UserLedgerTransactionTypeSummary
+ */
+export interface UserLedgerTransactionTypeSummary {
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionTypeSummary
+ */
+ 'entry_count'?: number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionTypeSummary
+ */
+ 'min_amount'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionTypeSummary
+ */
+ 'max_amount'?: number | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionTypeSummary
+ */
+ 'total_amount'?: number | null;
+}
+/**
+ *
+ * @export
+ * @interface UserLedgerTransactionTypesSummary
+ */
+export interface UserLedgerTransactionTypesSummary {
+ /**
+ *
+ * @type {UserLedgerTransactionTypeSummary}
+ * @memberof UserLedgerTransactionTypesSummary
+ */
+ 'bp_adjustment'?: UserLedgerTransactionTypeSummary;
+ /**
+ *
+ * @type {UserLedgerTransactionTypeSummary}
+ * @memberof UserLedgerTransactionTypesSummary
+ */
+ 'bp_payment'?: UserLedgerTransactionTypeSummary;
+ /**
+ *
+ * @type {UserLedgerTransactionTypeSummary}
+ * @memberof UserLedgerTransactionTypesSummary
+ */
+ 'user_bonus'?: UserLedgerTransactionTypeSummary;
+ /**
+ *
+ * @type {UserLedgerTransactionTypeSummary}
+ * @memberof UserLedgerTransactionTypesSummary
+ */
+ 'user_payout_request'?: UserLedgerTransactionTypeSummary;
+}
+/**
+ *
+ * @export
+ * @interface UserLedgerTransactionUserBonus
+ */
+export interface UserLedgerTransactionUserBonus {
+ /**
+ * When the Transaction was created
+ * @type {string}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'created': string;
+ /**
+ * External description suitable for UI
+ * @type {string}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'description'?: string;
+ /**
+ * The net amount affecting the user\'s wallet, in USDCents. Positive means the user\'s balance increased; negative means it decreased.
+ * @type {number}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'amount': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'balance_after'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'tx_type'?: UserLedgerTransactionUserBonusTxTypeEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'url': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionUserBonus
+ */
+ 'amount_string': string | null;
+}
+
+export const UserLedgerTransactionUserBonusTxTypeEnum = {
+ UserBonus: 'user_bonus'
+} as const;
+
+export type UserLedgerTransactionUserBonusTxTypeEnum = typeof UserLedgerTransactionUserBonusTxTypeEnum[keyof typeof UserLedgerTransactionUserBonusTxTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface UserLedgerTransactionUserPayout
+ */
+export interface UserLedgerTransactionUserPayout {
+ /**
+ * When the Transaction was created
+ * @type {string}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'created': string;
+ /**
+ * External description suitable for UI
+ * @type {string}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'description': string;
+ /**
+ * The net amount affecting the user\'s wallet, in USDCents. Positive means the user\'s balance increased; negative means it decreased.
+ * @type {number}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'amount': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'balance_after'?: number | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'tx_type'?: UserLedgerTransactionUserPayoutTxTypeEnum;
+ /**
+ * A unique identifier for the payout
+ * @type {string}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'payout_id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'url': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionUserPayout
+ */
+ 'amount_string': string | null;
+}
+
+export const UserLedgerTransactionUserPayoutTxTypeEnum = {
+ UserPayoutRequest: 'user_payout_request'
+} as const;
+
+export type UserLedgerTransactionUserPayoutTxTypeEnum = typeof UserLedgerTransactionUserPayoutTxTypeEnum[keyof typeof UserLedgerTransactionUserPayoutTxTypeEnum];
+
+/**
+ *
+ * @export
+ * @interface UserLedgerTransactionsResponse
+ */
+export interface UserLedgerTransactionsResponse {
+ /**
+ * Page number
+ * @type {number}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'page'?: number;
+ /**
+ * Page size
+ * @type {number}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'size'?: number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'total'?: number | null;
+ /**
+ *
+ * @type {Array<UserLedgerTransactionsResponseTransactionsInner>}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'transactions'?: Array<UserLedgerTransactionsResponseTransactionsInner>;
+ /**
+ *
+ * @type {UserLedgerTransactionTypesSummary}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'summary': UserLedgerTransactionTypesSummary;
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'status': UserLedgerTransactionsResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UserLedgerTransactionsResponse
+ */
+ 'pages': number | null;
+}
+
+export const UserLedgerTransactionsResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type UserLedgerTransactionsResponseStatusEnum = typeof UserLedgerTransactionsResponseStatusEnum[keyof typeof UserLedgerTransactionsResponseStatusEnum];
+
+/**
+ * @type UserLedgerTransactionsResponseTransactionsInner
+ * @export
+ */
+export type UserLedgerTransactionsResponseTransactionsInner = { tx_type: 'bp_adjustment' } & UserLedgerTransactionTaskAdjustment | { tx_type: 'bp_payment' } & UserLedgerTransactionTaskComplete | { tx_type: 'user_bonus' } & UserLedgerTransactionUserBonus | { tx_type: 'user_payout_request' } & UserLedgerTransactionUserPayout;
+
+/**
+ *
+ * @export
+ * @interface UserProfile
+ */
+export interface UserProfile {
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfile
+ */
+ 'email_address'?: string | null;
+ /**
+ *
+ * @type {User}
+ * @memberof UserProfile
+ */
+ 'user': User;
+ /**
+ * User\'s PID in marketplaces
+ * @type {{ [key: string]: string; }}
+ * @memberof UserProfile
+ */
+ 'marketplace_pids'?: { [key: string]: string; };
+ /**
+ *
+ * @type {Array<UserStreak>}
+ * @memberof UserProfile
+ */
+ 'streaks'?: Array<UserStreak>;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfile
+ */
+ 'email_md5': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfile
+ */
+ 'email_sha1': string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfile
+ */
+ 'email_sha256': string | null;
+}
+/**
+ *
+ * @export
+ * @interface UserProfileKnowledge
+ */
+export interface UserProfileKnowledge {
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledge
+ */
+ 'property_id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledge
+ */
+ 'property_label': string;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledge
+ */
+ 'translation': string;
+ /**
+ *
+ * @type {Array<UserProfileKnowledgeAnswer>}
+ * @memberof UserProfileKnowledge
+ */
+ 'answer'?: Array<UserProfileKnowledgeAnswer>;
+ /**
+ * When the User submitted this Profiling data
+ * @type {string}
+ * @memberof UserProfileKnowledge
+ */
+ 'created': string;
+}
+/**
+ *
+ * @export
+ * @interface UserProfileKnowledgeAnswer
+ */
+export interface UserProfileKnowledgeAnswer {
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledgeAnswer
+ */
+ 'id'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledgeAnswer
+ */
+ 'label'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledgeAnswer
+ */
+ 'translation'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileKnowledgeAnswer
+ */
+ 'value'?: string | null;
+}
+/**
+ *
+ * @export
+ * @interface UserProfileResponse
+ */
+export interface UserProfileResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof UserProfileResponse
+ */
+ 'status': UserProfileResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {UserProfile}
+ * @memberof UserProfileResponse
+ */
+ 'user_profile': UserProfile;
+}
+
+export const UserProfileResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type UserProfileResponseStatusEnum = typeof UserProfileResponseStatusEnum[keyof typeof UserProfileResponseStatusEnum];
+
+/**
+ *
+ * @export
+ * @interface UserProfileUpdateRequest
+ */
+export interface UserProfileUpdateRequest {
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfileUpdateRequest
+ */
+ 'email_address': string;
+}
+/**
+ *
+ * @export
+ * @interface UserProfilesResponse
+ */
+export interface UserProfilesResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof UserProfilesResponse
+ */
+ 'status': UserProfilesResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UserProfilesResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {Array<UserProfile>}
+ * @memberof UserProfilesResponse
+ */
+ 'user_profiles': Array<UserProfile>;
+}
+
+export const UserProfilesResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type UserProfilesResponseStatusEnum = typeof UserProfilesResponseStatusEnum[keyof typeof UserProfilesResponseStatusEnum];
+
+/**
+ * Send the answers to one or more questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\" TODO: look up the question_type from the question_id to apply MC or TE specific validation on the answer(s)
+ * @export
+ * @interface UserQuestionAnswerIn
+ */
+export interface UserQuestionAnswerIn {
+ /**
+ *
+ * @type {string}
+ * @memberof UserQuestionAnswerIn
+ */
+ 'question_id': string;
+ /**
+ * The user\'s answers to this question. Must pass the choice_id if the question is a Multiple Choice, or the actual text if the question is Text Entry
+ * @type {Array<string>}
+ * @memberof UserQuestionAnswerIn
+ */
+ 'answer': Array<string>;
+}
+/**
+ *
+ * @export
+ * @interface UserStreak
+ */
+export interface UserStreak {
+ /**
+ *
+ * @type {string}
+ * @memberof UserStreak
+ */
+ 'country_iso': string;
+ /**
+ *
+ * @type {StreakPeriod}
+ * @memberof UserStreak
+ */
+ 'period': StreakPeriod;
+ /**
+ *
+ * @type {StreakFulfillment}
+ * @memberof UserStreak
+ */
+ 'fulfillment': StreakFulfillment;
+ /**
+ *
+ * @type {number}
+ * @memberof UserStreak
+ */
+ 'current_streak': number;
+ /**
+ *
+ * @type {number}
+ * @memberof UserStreak
+ */
+ 'longest_streak': number;
+ /**
+ *
+ * @type {StreakState}
+ * @memberof UserStreak
+ */
+ 'state': StreakState;
+ /**
+ *
+ * @type {string}
+ * @memberof UserStreak
+ */
+ 'last_fulfilled_period_start'?: string | null;
+ /**
+ *
+ * @type {string}
+ * @memberof UserStreak
+ */
+ 'timezone_name': string;
+ /**
+ *
+ * @type {Array<any>}
+ * @memberof UserStreak
+ */
+ 'current_period_bounds': Array<any>;
+ /**
+ *
+ * @type {Array<any>}
+ * @memberof UserStreak
+ */
+ 'last_fulfilled_period_bounds': Array<any> | null;
+ /**
+ *
+ * @type {number}
+ * @memberof UserStreak
+ */
+ 'time_remaining_in_period': number | null;
+}
+
+
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const UserType = {
+ Business: 'business',
+ Cafe: 'cafe',
+ Cellular: 'cellular',
+ College: 'college',
+ ContentDeliveryNetwork: 'content_delivery_network',
+ ConsumerPrivacyNetwork: 'consumer_privacy_network',
+ Government: 'government',
+ Hosting: 'hosting',
+ Library: 'library',
+ Military: 'military',
+ Residential: 'residential',
+ Router: 'router',
+ School: 'school',
+ SearchEngineSpider: 'search_engine_spider',
+ Traveler: 'traveler'
+} as const;
+
+export type UserType = typeof UserType[keyof typeof UserType];
+
+
+/**
+ *
+ * @export
+ * @interface UserWalletBalance
+ */
+export interface UserWalletBalance {
+ /**
+ * (USD cents) The amount in the user\'s wallet.
+ * @type {number}
+ * @memberof UserWalletBalance
+ */
+ 'amount': number;
+ /**
+ * (USD cents) The amount in the user\'s wallet this is currently redeemable.
+ * @type {number}
+ * @memberof UserWalletBalance
+ */
+ 'redeemable_amount': number;
+ /**
+ * The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout = 100 (one dollar). - \"{payout*10:,.0f} Points\" -> \"1,000 Points\" - \"${payout/100:.2f}\" -> \"$1.00\"
+ * @type {string}
+ * @memberof UserWalletBalance
+ */
+ 'payout_format': string;
+ /**
+ * The \'amount\' with the payout_format applied. Can be displayed to the user.
+ * @type {string}
+ * @memberof UserWalletBalance
+ */
+ 'amount_string': string;
+ /**
+ * The \'redeemable_amount\' with the payout_format applied. Can be displayed to the user.
+ * @type {string}
+ * @memberof UserWalletBalance
+ */
+ 'redeemable_amount_string': string;
+}
+/**
+ *
+ * @export
+ * @interface UserWalletBalanceResponse
+ */
+export interface UserWalletBalanceResponse {
+ /**
+ * The status of the API response.
+ * @type {string}
+ * @memberof UserWalletBalanceResponse
+ */
+ 'status': UserWalletBalanceResponseStatusEnum;
+ /**
+ *
+ * @type {string}
+ * @memberof UserWalletBalanceResponse
+ */
+ 'msg'?: string | null;
+ /**
+ *
+ * @type {UserWalletBalance}
+ * @memberof UserWalletBalanceResponse
+ */
+ 'wallet': UserWalletBalance;
+}
+
+export const UserWalletBalanceResponseStatusEnum = {
+ Success: 'success',
+ Error: 'error'
+} as const;
+
+export type UserWalletBalanceResponseStatusEnum = typeof UserWalletBalanceResponseStatusEnum[keyof typeof UserWalletBalanceResponseStatusEnum];
+
+/**
+ * Stores configuration for the user wallet handling
+ * @export
+ * @interface UserWalletConfig
+ */
+export interface UserWalletConfig {
+ /**
+ * If enabled, the users\' wallets are managed.
+ * @type {boolean}
+ * @memberof UserWalletConfig
+ */
+ 'enabled'?: boolean;
+ /**
+ * Uses Amazon Mechanical Turk
+ * @type {boolean}
+ * @memberof UserWalletConfig
+ */
+ 'amt'?: boolean;
+ /**
+ *
+ * @type {Set<PayoutType>}
+ * @memberof UserWalletConfig
+ */
+ 'supported_payout_types'?: Set<PayoutType>;
+ /**
+ *
+ * @type {string}
+ * @memberof UserWalletConfig
+ */
+ 'min_cashout'?: string | null;
+}
+/**
+ *
+ * @export
+ * @interface ValidationError
+ */
+export interface ValidationError {
+ /**
+ *
+ * @type {Array<ValidationErrorLocInner>}
+ * @memberof ValidationError
+ */
+ 'loc': Array<ValidationErrorLocInner>;
+ /**
+ *
+ * @type {string}
+ * @memberof ValidationError
+ */
+ 'msg': string;
+ /**
+ *
+ * @type {string}
+ * @memberof ValidationError
+ */
+ 'type': string;
+}
+/**
+ *
+ * @export
+ * @interface ValidationErrorLocInner
+ */
+export interface ValidationErrorLocInner {
+}
+/**
+ * Returns buckets from WXET as single tasks Offerwall code: `55a4e1a9`
+ * @export
+ * @interface WXETOfferwall
+ */
+export interface WXETOfferwall {
+ /**
+ * Unique identifier to reference a generated offerwall
+ * @type {string}
+ * @memberof WXETOfferwall
+ */
+ 'id': string;
+ /**
+ * Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.
+ * @type {number}
+ * @memberof WXETOfferwall
+ */
+ 'availability_count': number;
+ /**
+ * Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.
+ * @type {number}
+ * @memberof WXETOfferwall
+ */
+ 'attempted_live_eligible_count'?: number;
+ /**
+ *
+ * @type {Array<WXETOfferwallBucket>}
+ * @memberof WXETOfferwall
+ */
+ 'buckets'?: Array<WXETOfferwallBucket>;
+ /**
+ * Explanations describing why so many or few opportunities are available.
+ * @type {Array<OfferwallReason>}
+ * @memberof WXETOfferwall
+ */
+ 'offerwall_reasons'?: Array<OfferwallReason>;
+}
+/**
+ *
+ * @export
+ * @interface WXETOfferwallBucket
+ */
+export interface WXETOfferwallBucket {
+ /**
+ * Unique identifier this particular bucket
+ * @type {string}
+ * @memberof WXETOfferwallBucket
+ */
+ 'id': string;
+ /**
+ * The URL to send a respondent into. Must not edit this URL in any way
+ * @type {string}
+ * @memberof WXETOfferwallBucket
+ */
+ 'uri': string;
+ /**
+ * The bucket\'s expected duration, in seconds
+ * @type {number}
+ * @memberof WXETOfferwallBucket
+ */
+ 'duration': number;
+ /**
+ * The bucket\'s min payout, in usd cents
+ * @type {number}
+ * @memberof WXETOfferwallBucket
+ */
+ 'min_payout': number;
+}
+/**
+ *
+ * @export
+ * @interface WXETOfferwallResponse
+ */
+export interface WXETOfferwallResponse {
+ /**
+ *
+ * @type {OfferWallInfo}
+ * @memberof WXETOfferwallResponse
+ */
+ 'info': OfferWallInfo;
+ /**
+ *
+ * @type {WXETOfferwall}
+ * @memberof WXETOfferwallResponse
+ */
+ 'offerwall': WXETOfferwall;
+}
+/**
+ *
+ * @export
+ * @enum {string}
+ */
+
+export const WallAdjustedStatus = {
+ Ac: 'ac',
+ Af: 'af',
+ Ca: 'ca',
+ Cc: 'cc'
+} as const;
+
+export type WallAdjustedStatus = typeof WallAdjustedStatus[keyof typeof WallAdjustedStatus];
+
+
+/**
+ *
+ * @export
+ * @interface WallOut
+ */
+export interface WallOut {
+ [key: string]: any;
+
+ /**
+ *
+ * @type {string}
+ * @memberof WallOut
+ */
+ 'uuid'?: string;
+ /**
+ *
+ * @type {Source}
+ * @memberof WallOut
+ */
+ 'source': Source;
+ /**
+ *
+ * @type {BuyerId}
+ * @memberof WallOut
+ */
+ 'buyer_id'?: BuyerId;
+ /**
+ *
+ * @type {string}
+ * @memberof WallOut
+ */
+ 'req_survey_id': string;
+ /**
+ *
+ * @type {string}
+ * @memberof WallOut
+ */
+ 'started'?: string;
+ /**
+ *
+ * @type {SurveyId}
+ * @memberof WallOut
+ */
+ 'survey_id'?: SurveyId;
+ /**
+ *
+ * @type {Finished}
+ * @memberof WallOut
+ */
+ 'finished'?: Finished;
+ /**
+ *
+ * @type {WallOutStatus}
+ * @memberof WallOut
+ */
+ 'status'?: WallOutStatus;
+ /**
+ *
+ * @type {WallOutStatusCode1}
+ * @memberof WallOut
+ */
+ 'status_code_1'?: WallOutStatusCode1 | null;
+ /**
+ *
+ * @type {WallOutStatusCode2}
+ * @memberof WallOut
+ */
+ 'status_code_2'?: WallOutStatusCode2;
+ /**
+ *
+ * @type {ExtStatusCode1}
+ * @memberof WallOut
+ */
+ 'ext_status_code_1'?: ExtStatusCode1;
+ /**
+ *
+ * @type {ExtStatusCode2}
+ * @memberof WallOut
+ */
+ 'ext_status_code_2'?: ExtStatusCode2;
+ /**
+ *
+ * @type {ExtStatusCode3}
+ * @memberof WallOut
+ */
+ 'ext_status_code_3'?: ExtStatusCode3;
+ /**
+ *
+ * @type {WallOutReportValue}
+ * @memberof WallOut
+ */
+ 'report_value'?: WallOutReportValue;
+ /**
+ *
+ * @type {ReportNotes}
+ * @memberof WallOut
+ */
+ 'report_notes'?: ReportNotes;
+ /**
+ *
+ * @type {WallOutAdjustedStatus}
+ * @memberof WallOut
+ */
+ 'adjusted_status'?: WallOutAdjustedStatus;
+ /**
+ *
+ * @type {AdjustedTimestamp}
+ * @memberof WallOut
+ */
+ 'adjusted_timestamp'?: AdjustedTimestamp;
+ /**
+ * The amount the user would earn from completing this task, if the status was a complete. If the BP has no payout xform, the user_cpi is None. This is analogous to the session\'s user_payout.
+ * @type {number}
+ * @memberof WallOut
+ */
+ 'user_cpi'?: number;
+ /**
+ *
+ * @type {UserCpiString}
+ * @memberof WallOut
+ */
+ 'user_cpi_string'?: UserCpiString;
+}
+
+
+/**
+ *
+ * @export
+ * @interface WallOutAdjustedStatus
+ */
+export interface WallOutAdjustedStatus {
+}
+/**
+ *
+ * @export
+ * @interface WallOutReportValue
+ */
+export interface WallOutReportValue {
+}
+/**
+ *
+ * @export
+ * @interface WallOutStatus
+ */
+export interface WallOutStatus {
+}
+/**
+ * __High level status code for outcome of the session.__ This should only be NULL if the Status is ABANDON or TIMEOUT Allowed values: - __BUYER_FAIL__: User terminated in buyer survey - __BUYER_QUALITY_FAIL__: User terminated in buyer survey for quality reasons - __PS_FAIL__: User failed in marketplace\'s prescreener - __PS_QUALITY__: User rejected by marketplace for quality reasons - __PS_BLOCKED__: User is explicitly blocked by the marketplace. Note: on some marketplaces, users can have multiple PS_QUALITY terminations and still complete surveys. - __PS_OVERQUOTA__: User rejected by marketplace for over quota - __PS_DUPLICATE__: User rejected by marketplace for duplicate - __GRS_FAIL__: The user failed within the GRS Platform - __GRS_QUALITY_FAIL__: The user failed within the GRS Platform for quality reasons - __GRS_ABANDON__: The user abandoned/timed out within the GRS Platform - __PS_ABANDON__: The user abandoned/timed out within the marketplace\'s pre-screen system. Note: On most marketplaces, we have no way of distinguishing between this and BUYER_ABANDON. BUYER_ABANDON is used as the default, unless we know it is PS_ABANDON. - __BUYER_ABANDON__: The user abandoned/timed out within the client survey - __UNKNOWN__: The status code is not documented - __COMPLETE__: The user completed the task successfully - __MARKETPLACE_FAIL__: Something was wrong upon the user redirecting from the marketplace, e.g. no postback received, or url hashing failures. - __SESSION_START_FAIL__: User failed before being sent into a marketplace - __SESSION_CONTINUE_FAIL__: User failed between attempts - __SESSION_START_QUALITY_FAIL__: User failed before being sent into a marketplace for \"security\" reasons - __SESSION_CONTINUE_QUALITY_FAIL__: User failed between attempts for \"security\" reasons
+ * @export
+ * @interface WallOutStatusCode1
+ */
+export interface WallOutStatusCode1 {
+}
+/**
+ * This should be set if the Wall.status_code_1 is MARKETPLACE_FAIL Allowed values: - __URL_HASHING_CHECK_FAILED__: The redirect URL (coming back from the marketplace) failed hashing checks - __BROKEN_REDIRECT__: The redirect URL was missing required query params or was unparseable - __INVALID_REDIRECT__: The redirect URL was invalid or inconsistent in some way and as a result we could not determine the outcome. This could be if a redirect received did not match the user\'s most recent attempt. - __INVALID_MARKETPLACE_POSTBACK__: The redirect indicated a complete, but no/invalid Postback was received from the marketplace - __NO_MARKETPLACE_POSTBACK__: No/invalid Postback was received from the marketplace. Used in cases where the redirect does not contain a status. - __COMPLETE_TOO_FAST__: The marketplace indicates the user completed the survey, but we don\'t think this is valid due to speeding. Generally this cutoff is the 95th percentile of our calculated CompletionTime survey stat. - __INTERNAL_ERROR__: Something happened during the handling of this redirect (on our side)
+ * @export
+ * @interface WallOutStatusCode2
+ */
+export interface WallOutStatusCode2 {
+}
+/**
+ * This should be set if the Wall.status_code_1 is MARKETPLACE_FAIL
+ * @export
+ * @enum {number}
+ */
+
+export const WallStatusCode2 = {
+ NUMBER_12: 12,
+ NUMBER_16: 16,
+ NUMBER_17: 17,
+ NUMBER_13: 13,
+ NUMBER_18: 18,
+ NUMBER_14: 14,
+ NUMBER_15: 15
+} as const;
+
+export type WallStatusCode2 = typeof WallStatusCode2[keyof typeof WallStatusCode2];
+
+
+/**
+ *
+ * @export
+ * @interface YieldManConfig
+ */
+export interface YieldManConfig {
+ /**
+ *
+ * @type {OfferWallCategoryRequest}
+ * @memberof YieldManConfig
+ */
+ 'category_request'?: OfferWallCategoryRequest;
+ /**
+ *
+ * @type {OfferWallRequestYieldmanParams}
+ * @memberof YieldManConfig
+ */
+ 'scoring_params'?: OfferWallRequestYieldmanParams;
+}
+
+/**
+ * ContestApi - axios parameter creator
+ * @export
+ */
+export const ContestApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Gets a Contest. Includes several keys that are specific to the requesting user: e.g. user_winnings, user_amount.
+ * @summary Get Contest User View
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} contestUuid
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getContestUserViewProductIdContestContestUuidUserProductUserIdGet: async (productId: string, contestUuid: string, productUserId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getContestUserViewProductIdContestContestUuidUserProductUserIdGet', 'productId', productId)
+ // verify required parameter 'contestUuid' is not null or undefined
+ assertParamExists('getContestUserViewProductIdContestContestUuidUserProductUserIdGet', 'contestUuid', contestUuid)
+ // verify required parameter 'productUserId' is not null or undefined
+ assertParamExists('getContestUserViewProductIdContestContestUuidUserProductUserIdGet', 'productUserId', productUserId)
+ const localVarPath = `/{product_id}/contest/{contest_uuid}/user/{product_user_id}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"contest_uuid"}}`, encodeURIComponent(String(contestUuid)))
+ .replace(`{${"product_user_id"}}`, encodeURIComponent(String(productUserId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Get contests the requesting user is eligible for. Contest eligibility may involve the user\'s country, which is determined by the ip address of THIS request.
+ * @summary List Contests User Eligible
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet: async (productId: string, productUserId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet', 'productId', productId)
+ // verify required parameter 'productUserId' is not null or undefined
+ assertParamExists('listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet', 'productUserId', productUserId)
+ const localVarPath = `/{product_id}/contest/user/{product_user_id}/eligible/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"product_user_id"}}`, encodeURIComponent(String(productUserId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Get contests the requesting user has entered. This includes contests such as milestone contests where the user was automatically entered by having a complete for instance.
+ * @summary List Contests User Entered
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet: async (productId: string, productUserId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet', 'productId', productId)
+ // verify required parameter 'productUserId' is not null or undefined
+ assertParamExists('listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet', 'productUserId', productUserId)
+ const localVarPath = `/{product_id}/contest/user/{product_user_id}/entered/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"product_user_id"}}`, encodeURIComponent(String(productUserId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Get contests the requesting user has won a prize for.
+ * @summary List Contests User Winner
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet: async (productId: string, productUserId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet', 'productId', productId)
+ // verify required parameter 'productUserId' is not null or undefined
+ assertParamExists('listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet', 'productUserId', productUserId)
+ const localVarPath = `/{product_id}/contest/user/{product_user_id}/winner/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"product_user_id"}}`, encodeURIComponent(String(productUserId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * ContestApi - functional programming interface
+ * @export
+ */
+export const ContestApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = ContestApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Gets a Contest. Includes several keys that are specific to the requesting user: e.g. user_winnings, user_amount.
+ * @summary Get Contest User View
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} contestUuid
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getContestUserViewProductIdContestContestUuidUserProductUserIdGet(productId: string, contestUuid: string, productUserId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getContestUserViewProductIdContestContestUuidUserProductUserIdGet(productId, contestUuid, productUserId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ContestApi.getContestUserViewProductIdContestContestUuidUserProductUserIdGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Get contests the requesting user is eligible for. Contest eligibility may involve the user\'s country, which is determined by the ip address of THIS request.
+ * @summary List Contests User Eligible
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(productId, productUserId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ContestApi.listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Get contests the requesting user has entered. This includes contests such as milestone contests where the user was automatically entered by having a complete for instance.
+ * @summary List Contests User Entered
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(productId, productUserId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ContestApi.listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Get contests the requesting user has won a prize for.
+ * @summary List Contests User Winner
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(productId, productUserId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ContestApi.listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * ContestApi - factory interface
+ * @export
+ */
+export const ContestApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = ContestApiFp(configuration)
+ return {
+ /**
+ * Gets a Contest. Includes several keys that are specific to the requesting user: e.g. user_winnings, user_amount.
+ * @summary Get Contest User View
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} contestUuid
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getContestUserViewProductIdContestContestUuidUserProductUserIdGet(productId: string, contestUuid: string, productUserId: string, options?: RawAxiosRequestConfig): AxiosPromise<ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet> {
+ return localVarFp.getContestUserViewProductIdContestContestUuidUserProductUserIdGet(productId, contestUuid, productUserId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Get contests the requesting user is eligible for. Contest eligibility may involve the user\'s country, which is determined by the ip address of THIS request.
+ * @summary List Contests User Eligible
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): AxiosPromise<Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>> {
+ return localVarFp.listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(productId, productUserId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Get contests the requesting user has entered. This includes contests such as milestone contests where the user was automatically entered by having a complete for instance.
+ * @summary List Contests User Entered
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): AxiosPromise<Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>> {
+ return localVarFp.listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(productId, productUserId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Get contests the requesting user has won a prize for.
+ * @summary List Contests User Winner
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): AxiosPromise<Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>> {
+ return localVarFp.listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(productId, productUserId, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * ContestApi - object-oriented interface
+ * @export
+ * @class ContestApi
+ * @extends {BaseAPI}
+ */
+export class ContestApi extends BaseAPI {
+ /**
+ * Gets a Contest. Includes several keys that are specific to the requesting user: e.g. user_winnings, user_amount.
+ * @summary Get Contest User View
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} contestUuid
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ContestApi
+ */
+ public getContestUserViewProductIdContestContestUuidUserProductUserIdGet(productId: string, contestUuid: string, productUserId: string, options?: RawAxiosRequestConfig) {
+ return ContestApiFp(this.configuration).getContestUserViewProductIdContestContestUuidUserProductUserIdGet(productId, contestUuid, productUserId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Get contests the requesting user is eligible for. Contest eligibility may involve the user\'s country, which is determined by the ip address of THIS request.
+ * @summary List Contests User Eligible
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ContestApi
+ */
+ public listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig) {
+ return ContestApiFp(this.configuration).listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(productId, productUserId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Get contests the requesting user has entered. This includes contests such as milestone contests where the user was automatically entered by having a complete for instance.
+ * @summary List Contests User Entered
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ContestApi
+ */
+ public listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig) {
+ return ContestApiFp(this.configuration).listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(productId, productUserId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Get contests the requesting user has won a prize for.
+ * @summary List Contests User Winner
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ContestApi
+ */
+ public listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig) {
+ return ContestApiFp(this.configuration).listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(productId, productUserId, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * DashboardApi - axios parameter creator
+ * @export
+ */
+export const DashboardApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ *
+ * @summary Marketplace Inventory
+ * @param {MarketplaceInventoryDashboardInventoryGetMarketplaceEnum} marketplace
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ marketplaceInventoryDashboardInventoryGet: async (marketplace: MarketplaceInventoryDashboardInventoryGetMarketplaceEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'marketplace' is not null or undefined
+ assertParamExists('marketplaceInventoryDashboardInventoryGet', 'marketplace', marketplace)
+ const localVarPath = `/dashboard/inventory/`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (marketplace !== undefined) {
+ localVarQueryParameter['marketplace'] = marketplace;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * DashboardApi - functional programming interface
+ * @export
+ */
+export const DashboardApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = DashboardApiAxiosParamCreator(configuration)
+ return {
+ /**
+ *
+ * @summary Marketplace Inventory
+ * @param {MarketplaceInventoryDashboardInventoryGetMarketplaceEnum} marketplace
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async marketplaceInventoryDashboardInventoryGet(marketplace: MarketplaceInventoryDashboardInventoryGetMarketplaceEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<MarketplaceSummary>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.marketplaceInventoryDashboardInventoryGet(marketplace, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DashboardApi.marketplaceInventoryDashboardInventoryGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * DashboardApi - factory interface
+ * @export
+ */
+export const DashboardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = DashboardApiFp(configuration)
+ return {
+ /**
+ *
+ * @summary Marketplace Inventory
+ * @param {MarketplaceInventoryDashboardInventoryGetMarketplaceEnum} marketplace
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ marketplaceInventoryDashboardInventoryGet(marketplace: MarketplaceInventoryDashboardInventoryGetMarketplaceEnum, options?: RawAxiosRequestConfig): AxiosPromise<MarketplaceSummary> {
+ return localVarFp.marketplaceInventoryDashboardInventoryGet(marketplace, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * DashboardApi - object-oriented interface
+ * @export
+ * @class DashboardApi
+ * @extends {BaseAPI}
+ */
+export class DashboardApi extends BaseAPI {
+ /**
+ *
+ * @summary Marketplace Inventory
+ * @param {MarketplaceInventoryDashboardInventoryGetMarketplaceEnum} marketplace
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof DashboardApi
+ */
+ public marketplaceInventoryDashboardInventoryGet(marketplace: MarketplaceInventoryDashboardInventoryGetMarketplaceEnum, options?: RawAxiosRequestConfig) {
+ return DashboardApiFp(this.configuration).marketplaceInventoryDashboardInventoryGet(marketplace, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+/**
+ * @export
+ */
+export const MarketplaceInventoryDashboardInventoryGetMarketplaceEnum = {
+ Wxet: 'WXET'
+} as const;
+export type MarketplaceInventoryDashboardInventoryGetMarketplaceEnum = typeof MarketplaceInventoryDashboardInventoryGetMarketplaceEnum[keyof typeof MarketplaceInventoryDashboardInventoryGetMarketplaceEnum];
+
+
+/**
+ * LeaderboardApi - axios parameter creator
+ * @export
+ */
+export const LeaderboardApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Get the Winners of leaderboard contests
+ * @summary Leaderboard Winners
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet: async (productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet', 'productId', productId)
+ // verify required parameter 'boardCode' is not null or undefined
+ assertParamExists('leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet', 'boardCode', boardCode)
+ // verify required parameter 'freq' is not null or undefined
+ assertParamExists('leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet', 'freq', freq)
+ const localVarPath = `/{product_id}/leaderboard/timespan/{board_code}/winners/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"board_code"}}`, encodeURIComponent(String(boardCode)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (freq !== undefined) {
+ localVarQueryParameter['freq'] = freq;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @summary Timespan Leaderboard
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {string} [bpuid] Brokerage Product User ID. If passed, this results in the filtering of rows to include this user\&#39;s row, plus rows above and below in rank (up to &#x60;limit&#x60; rows). Otherwise, the top &#x60;limit&#x60; rows are returned.
+ * @param {string} [withinTime] Any local timestamp falling within the desired leaderboard\&#39;s period. If not passed, uses the country\&#39;s current time period.
+ * @param {number} [limit] Max number of rows to return
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet: async (productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, bpuid?: string, withinTime?: string, limit?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet', 'productId', productId)
+ // verify required parameter 'boardCode' is not null or undefined
+ assertParamExists('timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet', 'boardCode', boardCode)
+ // verify required parameter 'freq' is not null or undefined
+ assertParamExists('timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet', 'freq', freq)
+ const localVarPath = `/{product_id}/leaderboard/timespan/{board_code}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"board_code"}}`, encodeURIComponent(String(boardCode)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (freq !== undefined) {
+ localVarQueryParameter['freq'] = freq;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (withinTime !== undefined) {
+ localVarQueryParameter['within_time'] = (withinTime as any instanceof Date) ?
+ (withinTime as any).toISOString() :
+ withinTime;
+ }
+
+ if (limit !== undefined) {
+ localVarQueryParameter['limit'] = limit;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * LeaderboardApi - functional programming interface
+ * @export
+ */
+export const LeaderboardApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = LeaderboardApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Get the Winners of leaderboard contests
+ * @summary Leaderboard Winners
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LeaderboardWinnerResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(productId, boardCode, freq, countryIso, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['LeaderboardApi.leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @summary Timespan Leaderboard
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {string} [bpuid] Brokerage Product User ID. If passed, this results in the filtering of rows to include this user\&#39;s row, plus rows above and below in rank (up to &#x60;limit&#x60; rows). Otherwise, the top &#x60;limit&#x60; rows are returned.
+ * @param {string} [withinTime] Any local timestamp falling within the desired leaderboard\&#39;s period. If not passed, uses the country\&#39;s current time period.
+ * @param {number} [limit] Max number of rows to return
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, bpuid?: string, withinTime?: string, limit?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LeaderboardResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(productId, boardCode, freq, countryIso, bpuid, withinTime, limit, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['LeaderboardApi.timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * LeaderboardApi - factory interface
+ * @export
+ */
+export const LeaderboardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = LeaderboardApiFp(configuration)
+ return {
+ /**
+ * Get the Winners of leaderboard contests
+ * @summary Leaderboard Winners
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, options?: RawAxiosRequestConfig): AxiosPromise<LeaderboardWinnerResponse> {
+ return localVarFp.leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(productId, boardCode, freq, countryIso, options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @summary Timespan Leaderboard
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {string} [bpuid] Brokerage Product User ID. If passed, this results in the filtering of rows to include this user\&#39;s row, plus rows above and below in rank (up to &#x60;limit&#x60; rows). Otherwise, the top &#x60;limit&#x60; rows are returned.
+ * @param {string} [withinTime] Any local timestamp falling within the desired leaderboard\&#39;s period. If not passed, uses the country\&#39;s current time period.
+ * @param {number} [limit] Max number of rows to return
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, bpuid?: string, withinTime?: string, limit?: number, options?: RawAxiosRequestConfig): AxiosPromise<LeaderboardResponse> {
+ return localVarFp.timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(productId, boardCode, freq, countryIso, bpuid, withinTime, limit, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * LeaderboardApi - object-oriented interface
+ * @export
+ * @class LeaderboardApi
+ * @extends {BaseAPI}
+ */
+export class LeaderboardApi extends BaseAPI {
+ /**
+ * Get the Winners of leaderboard contests
+ * @summary Leaderboard Winners
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof LeaderboardApi
+ */
+ public leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, options?: RawAxiosRequestConfig) {
+ return LeaderboardApiFp(this.configuration).leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(productId, boardCode, freq, countryIso, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @summary Timespan Leaderboard
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {LeaderboardCode} boardCode The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts
+ * @param {LeaderboardFrequency} freq The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00
+ * @param {string} [countryIso] Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.
+ * @param {string} [bpuid] Brokerage Product User ID. If passed, this results in the filtering of rows to include this user\&#39;s row, plus rows above and below in rank (up to &#x60;limit&#x60; rows). Otherwise, the top &#x60;limit&#x60; rows are returned.
+ * @param {string} [withinTime] Any local timestamp falling within the desired leaderboard\&#39;s period. If not passed, uses the country\&#39;s current time period.
+ * @param {number} [limit] Max number of rows to return
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof LeaderboardApi
+ */
+ public timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(productId: string, boardCode: LeaderboardCode, freq: LeaderboardFrequency, countryIso?: string, bpuid?: string, withinTime?: string, limit?: number, options?: RawAxiosRequestConfig) {
+ return LeaderboardApiFp(this.configuration).timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(productId, boardCode, freq, countryIso, bpuid, withinTime, limit, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * OfferwallApi - axios parameter creator
+ * @export
+ */
+export const OfferwallApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality.
+ * @summary Marketplace Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ marketplaceOfferwallProductIdOfferwall5fa23085Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('marketplaceOfferwallProductIdOfferwall5fa23085Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('marketplaceOfferwallProductIdOfferwall5fa23085Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/5fa23085/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Block Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost} bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost: async (productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost: BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId?: string | null, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost', 'productId', productId)
+ // verify required parameter 'offerwallId' is not null or undefined
+ assertParamExists('offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost', 'offerwallId', offerwallId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost', 'bpuid', bpuid)
+ // verify required parameter 'bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost' is not null or undefined
+ assertParamExists('offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost', 'bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost', bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost)
+ const localVarPath = `/{product_id}/offerwall/7a89dcdb/{offerwall_id}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"offerwall_id"}}`, encodeURIComponent(String(offerwallId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (sessionId !== undefined) {
+ localVarQueryParameter['session_id'] = sessionId;
+ }
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. No buckets are returned if the user is blocked.
+ * @summary Offerwall Softpair Block
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/7a89dcdb/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (maxOptions !== undefined) {
+ localVarQueryParameter['max_options'] = maxOptions;
+ }
+
+ if (maxQuestions !== undefined) {
+ localVarQueryParameter['max_questions'] = maxQuestions;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost} bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost: async (productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost: BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId?: string | null, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost', 'productId', productId)
+ // verify required parameter 'offerwallId' is not null or undefined
+ assertParamExists('offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost', 'offerwallId', offerwallId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost', 'bpuid', bpuid)
+ // verify required parameter 'bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost' is not null or undefined
+ assertParamExists('offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost', 'bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost', bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost)
+ const localVarPath = `/{product_id}/offerwall/37d1da64/{offerwall_id}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"offerwall_id"}}`, encodeURIComponent(String(offerwallId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (sessionId !== undefined) {
+ localVarQueryParameter['session_id'] = sessionId;
+ }
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience.
+ * @summary Offerwall Softpair
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairProductIdOfferwall37d1da64Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('offerwallSoftpairProductIdOfferwall37d1da64Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('offerwallSoftpairProductIdOfferwall37d1da64Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/37d1da64/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (maxOptions !== undefined) {
+ localVarQueryParameter['max_options'] = maxOptions;
+ }
+
+ if (maxQuestions !== undefined) {
+ localVarQueryParameter['max_questions'] = maxQuestions;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary One Shot Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {Set<Source>} [sources] Restrict tasks to those from these marketplaces only.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ oneShotOfferwallProductIdOfferwall6f27b1aeGet: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, sources?: Set<Source>, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('oneShotOfferwallProductIdOfferwall6f27b1aeGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('oneShotOfferwallProductIdOfferwall6f27b1aeGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/6f27b1ae/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (sources) {
+ localVarQueryParameter['sources'] = Array.from(sources);
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Only returns a single bucket with the top scoring tasks.
+ * @summary Single Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ singleOfferwallProductIdOfferwall5fl8bpv5Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('singleOfferwallProductIdOfferwall5fl8bpv5Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('singleOfferwallProductIdOfferwall5fl8bpv5Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/5fl8bpv5/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Returns an offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features.
+ * @summary Starwall Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallOfferwallProductIdOfferwallB59a2d2bGet: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('starwallOfferwallProductIdOfferwallB59a2d2bGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('starwallOfferwallProductIdOfferwallB59a2d2bGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/b59a2d2b/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Starwall Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/7fa1b3f4/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Starwall Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/630db2a4/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents.
+ * @summary Starwall Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallPlusOfferwallProductIdOfferwall5481f322Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('starwallPlusOfferwallProductIdOfferwall5481f322Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('starwallPlusOfferwallProductIdOfferwall5481f322Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/5481f322/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Returns an offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering.
+ * @summary Topn Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNOfferwallProductIdOfferwall45b7228a7Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('topNOfferwallProductIdOfferwall45b7228a7Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('topNOfferwallProductIdOfferwall45b7228a7Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/45b7228a7/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Topn Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNPlusBlockOfferwallProductIdOfferwallD48cce47Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('topNPlusBlockOfferwallProductIdOfferwallD48cce47Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('topNPlusBlockOfferwallProductIdOfferwallD48cce47Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/d48cce47/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Topn Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/1e5f0af8/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents.
+ * @summary Topn Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNPlusOfferwallProductIdOfferwallB145b803Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('topNPlusOfferwallProductIdOfferwallB145b803Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('topNPlusOfferwallProductIdOfferwallB145b803Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/b145b803/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+ if (minBinSize !== undefined) {
+ localVarQueryParameter['min_bin_size'] = minBinSize;
+ }
+
+ if (splitBy !== undefined) {
+ localVarQueryParameter['split_by'] = splitBy;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary Wxet Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ wXETOfferwallProductIdOfferwall55a4e1a9Get: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('wXETOfferwallProductIdOfferwall55a4e1a9Get', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('wXETOfferwallProductIdOfferwall55a4e1a9Get', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/offerwall/55a4e1a9/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languages) {
+ localVarQueryParameter['languages'] = languages;
+ }
+
+ if (behavior !== undefined) {
+ localVarQueryParameter['behavior'] = behavior;
+ }
+
+ if (minPayout !== undefined) {
+ localVarQueryParameter['min_payout'] = minPayout;
+ }
+
+ if (duration !== undefined) {
+ localVarQueryParameter['duration'] = duration;
+ }
+
+ if (nBins !== undefined) {
+ localVarQueryParameter['n_bins'] = nBins;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * OfferwallApi - functional programming interface
+ * @export
+ */
+export const OfferwallApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = OfferwallApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality.
+ * @summary Marketplace Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async marketplaceOfferwallProductIdOfferwall5fa23085Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<MarketplaceOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.marketplaceOfferwallProductIdOfferwall5fa23085Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, minBinSize, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.marketplaceOfferwallProductIdOfferwall5fa23085Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Block Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost} bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost: BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId?: string | null, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SoftPairOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(productId, offerwallId, bpuid, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. No buckets are returned if the user is blocked.
+ * @summary Offerwall Softpair Block
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SoftPairOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, maxOptions, maxQuestions, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost} bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost: BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId?: string | null, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SoftPairOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(productId, offerwallId, bpuid, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience.
+ * @summary Offerwall Softpair
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async offerwallSoftpairProductIdOfferwall37d1da64Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SoftPairOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.offerwallSoftpairProductIdOfferwall37d1da64Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, maxOptions, maxQuestions, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.offerwallSoftpairProductIdOfferwall37d1da64Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary One Shot Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {Set<Source>} [sources] Restrict tasks to those from these marketplaces only.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async oneShotOfferwallProductIdOfferwall6f27b1aeGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, sources?: Set<Source>, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<OneShotOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.oneShotOfferwallProductIdOfferwall6f27b1aeGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, sources, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.oneShotOfferwallProductIdOfferwall6f27b1aeGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Only returns a single bucket with the top scoring tasks.
+ * @summary Single Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async singleOfferwallProductIdOfferwall5fl8bpv5Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SingleEntryOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.singleOfferwallProductIdOfferwall5fl8bpv5Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, minBinSize, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.singleOfferwallProductIdOfferwall5fl8bpv5Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Returns an offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features.
+ * @summary Starwall Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async starwallOfferwallProductIdOfferwallB59a2d2bGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StarwallOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.starwallOfferwallProductIdOfferwallB59a2d2bGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.starwallOfferwallProductIdOfferwallB59a2d2bGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Starwall Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StarwallPlusBlockOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Starwall Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StarwallPlusBlockRecontactOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents.
+ * @summary Starwall Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async starwallPlusOfferwallProductIdOfferwall5481f322Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StarwallPlusOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.starwallPlusOfferwallProductIdOfferwall5481f322Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.starwallPlusOfferwallProductIdOfferwall5481f322Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Returns an offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering.
+ * @summary Topn Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async topNOfferwallProductIdOfferwall45b7228a7Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TopNOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.topNOfferwallProductIdOfferwall45b7228a7Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.topNOfferwallProductIdOfferwall45b7228a7Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Topn Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TopNPlusBlockOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.topNPlusBlockOfferwallProductIdOfferwallD48cce47Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Topn Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TopNPlusBlockRecontactOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents.
+ * @summary Topn Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async topNPlusOfferwallProductIdOfferwallB145b803Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TopNPlusOfferWallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.topNPlusOfferwallProductIdOfferwallB145b803Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.topNPlusOfferwallProductIdOfferwallB145b803Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary Wxet Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async wXETOfferwallProductIdOfferwall55a4e1a9Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<WXETOfferwallResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.wXETOfferwallProductIdOfferwall55a4e1a9Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['OfferwallApi.wXETOfferwallProductIdOfferwall55a4e1a9Get']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * OfferwallApi - factory interface
+ * @export
+ */
+export const OfferwallApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = OfferwallApiFp(configuration)
+ return {
+ /**
+ * Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality.
+ * @summary Marketplace Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ marketplaceOfferwallProductIdOfferwall5fa23085Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options?: RawAxiosRequestConfig): AxiosPromise<MarketplaceOfferwallResponse> {
+ return localVarFp.marketplaceOfferwallProductIdOfferwall5fa23085Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, minBinSize, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Block Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost} bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost: BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId?: string | null, options?: RawAxiosRequestConfig): AxiosPromise<SoftPairOfferwallResponse> {
+ return localVarFp.offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(productId, offerwallId, bpuid, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. No buckets are returned if the user is blocked.
+ * @summary Offerwall Softpair Block
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options?: RawAxiosRequestConfig): AxiosPromise<SoftPairOfferwallResponse> {
+ return localVarFp.offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, maxOptions, maxQuestions, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost} bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost: BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId?: string | null, options?: RawAxiosRequestConfig): AxiosPromise<SoftPairOfferwallResponse> {
+ return localVarFp.offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(productId, offerwallId, bpuid, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience.
+ * @summary Offerwall Softpair
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ offerwallSoftpairProductIdOfferwall37d1da64Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options?: RawAxiosRequestConfig): AxiosPromise<SoftPairOfferwallResponse> {
+ return localVarFp.offerwallSoftpairProductIdOfferwall37d1da64Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, maxOptions, maxQuestions, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary One Shot Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {Set<Source>} [sources] Restrict tasks to those from these marketplaces only.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ oneShotOfferwallProductIdOfferwall6f27b1aeGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, sources?: Set<Source>, options?: RawAxiosRequestConfig): AxiosPromise<OneShotOfferwallResponse> {
+ return localVarFp.oneShotOfferwallProductIdOfferwall6f27b1aeGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, sources, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Only returns a single bucket with the top scoring tasks.
+ * @summary Single Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ singleOfferwallProductIdOfferwall5fl8bpv5Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options?: RawAxiosRequestConfig): AxiosPromise<SingleEntryOfferWallResponse> {
+ return localVarFp.singleOfferwallProductIdOfferwall5fl8bpv5Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, minBinSize, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Returns an offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features.
+ * @summary Starwall Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallOfferwallProductIdOfferwallB59a2d2bGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<StarwallOfferWallResponse> {
+ return localVarFp.starwallOfferwallProductIdOfferwallB59a2d2bGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Starwall Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<StarwallPlusBlockOfferWallResponse> {
+ return localVarFp.starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Starwall Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<StarwallPlusBlockRecontactOfferWallResponse> {
+ return localVarFp.starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents.
+ * @summary Starwall Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ starwallPlusOfferwallProductIdOfferwall5481f322Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<StarwallPlusOfferWallResponse> {
+ return localVarFp.starwallPlusOfferwallProductIdOfferwall5481f322Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Returns an offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering.
+ * @summary Topn Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNOfferwallProductIdOfferwall45b7228a7Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<TopNOfferWallResponse> {
+ return localVarFp.topNOfferwallProductIdOfferwall45b7228a7Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Topn Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<TopNPlusBlockOfferWallResponse> {
+ return localVarFp.topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Topn Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<TopNPlusBlockRecontactOfferWallResponse> {
+ return localVarFp.topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents.
+ * @summary Topn Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ topNPlusOfferwallProductIdOfferwallB145b803Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum, options?: RawAxiosRequestConfig): AxiosPromise<TopNPlusOfferWallResponse> {
+ return localVarFp.topNPlusOfferwallProductIdOfferwallB145b803Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary Wxet Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ wXETOfferwallProductIdOfferwall55a4e1a9Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, options?: RawAxiosRequestConfig): AxiosPromise<WXETOfferwallResponse> {
+ return localVarFp.wXETOfferwallProductIdOfferwall55a4e1a9Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * OfferwallApi - object-oriented interface
+ * @export
+ * @class OfferwallApi
+ * @extends {BaseAPI}
+ */
+export class OfferwallApi extends BaseAPI {
+ /**
+ * Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality.
+ * @summary Marketplace Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public marketplaceOfferwallProductIdOfferwall5fa23085Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).marketplaceOfferwallProductIdOfferwall5fa23085Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, minBinSize, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Block Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost} bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost: BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId?: string | null, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(productId, offerwallId, bpuid, bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost, sessionId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. No buckets are returned if the user is blocked.
+ * @summary Offerwall Softpair Block
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, maxOptions, maxQuestions, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+ * @summary Offerwall Softpair Post
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} offerwallId The offerwall ID the user is interacting with
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost} bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+ * @param {string | null} [sessionId] A session id (uuid4.hex)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(productId: string, offerwallId: string, bpuid: string, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost: BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId?: string | null, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(productId, offerwallId, bpuid, bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost, sessionId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience.
+ * @summary Offerwall Softpair
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {number} [maxOptions] Max number of options an allowed question can have (allowed to be asked)
+ * @param {number} [maxQuestions] Max number of missing questions on a single bin
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public offerwallSoftpairProductIdOfferwall37d1da64Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, maxOptions?: number, maxQuestions?: number, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).offerwallSoftpairProductIdOfferwall37d1da64Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, maxOptions, maxQuestions, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary One Shot Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {Set<Source>} [sources] Restrict tasks to those from these marketplaces only.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public oneShotOfferwallProductIdOfferwall6f27b1aeGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, sources?: Set<Source>, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).oneShotOfferwallProductIdOfferwall6f27b1aeGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, sources, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Only returns a single bucket with the top scoring tasks.
+ * @summary Single Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public singleOfferwallProductIdOfferwall5fl8bpv5Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, minBinSize?: number, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).singleOfferwallProductIdOfferwall5fl8bpv5Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, minBinSize, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Returns an offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features.
+ * @summary Starwall Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public starwallOfferwallProductIdOfferwallB59a2d2bGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).starwallOfferwallProductIdOfferwallB59a2d2bGet(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Starwall Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Starwall Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Same as the StarwallOfferWall, but the buckets include contents.
+ * @summary Starwall Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public starwallPlusOfferwallProductIdOfferwall5481f322Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).starwallPlusOfferwallProductIdOfferwall5481f322Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Returns an offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering.
+ * @summary Topn Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public topNOfferwallProductIdOfferwall45b7228a7Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).topNOfferwallProductIdOfferwall45b7228a7Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+ * @summary Topn Plus Block Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+ * @summary Topn Plus Block Recontact Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Same as the TopNOfferWall, but the buckets include contents.
+ * @summary Topn Plus Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {number} [minBinSize] Minimum number of tasks that need to be in a bucket
+ * @param {TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum} [splitBy] Cluster tasks by payout or duration
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public topNPlusOfferwallProductIdOfferwallB145b803Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, minBinSize?: number, splitBy?: TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).topNPlusOfferwallProductIdOfferwallB145b803Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, minBinSize, splitBy, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Each bucket has only 1 single task, and only basic info is returned about each bucket.
+ * @summary Wxet Offerwall
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {Array<string>} [languages] Respondent\&#39;s desired languages (ISO 639-2/B, lowercase)
+ * @param {string} [behavior] Allows using custom scoring functions. Please discuss directly with GRL.
+ * @param {string} [minPayout] Decimal representation of the minimum amount of USD that any of the tasks will pay
+ * @param {number} [duration] Maximum length of desired task (in seconds).
+ * @param {number} [nBins] Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof OfferwallApi
+ */
+ public wXETOfferwallProductIdOfferwall55a4e1a9Get(productId: string, bpuid: string, ip?: string, countryIso?: string, languages?: Array<string>, behavior?: string, minPayout?: string, duration?: number, nBins?: number, options?: RawAxiosRequestConfig) {
+ return OfferwallApiFp(this.configuration).wXETOfferwallProductIdOfferwall55a4e1a9Get(productId, bpuid, ip, countryIso, languages, behavior, minPayout, duration, nBins, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+/**
+ * @export
+ */
+export const StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum = typeof StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum[keyof typeof StarwallOfferwallProductIdOfferwallB59a2d2bGetSplitByEnum];
+/**
+ * @export
+ */
+export const StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum = typeof StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum[keyof typeof StarwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4GetSplitByEnum];
+/**
+ * @export
+ */
+export const StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum = typeof StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum[keyof typeof StarwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4GetSplitByEnum];
+/**
+ * @export
+ */
+export const StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum = typeof StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum[keyof typeof StarwallPlusOfferwallProductIdOfferwall5481f322GetSplitByEnum];
+/**
+ * @export
+ */
+export const TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum = typeof TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum[keyof typeof TopNOfferwallProductIdOfferwall45b7228a7GetSplitByEnum];
+/**
+ * @export
+ */
+export const TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum = typeof TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum[keyof typeof TopNPlusBlockOfferwallProductIdOfferwallD48cce47GetSplitByEnum];
+/**
+ * @export
+ */
+export const TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum = typeof TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum[keyof typeof TopNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8GetSplitByEnum];
+/**
+ * @export
+ */
+export const TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum = {
+ Payout: 'payout',
+ Duration: 'duration'
+} as const;
+export type TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum = typeof TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum[keyof typeof TopNPlusOfferwallProductIdOfferwallB145b803GetSplitByEnum];
+
+
+/**
+ * ProductUserApi - axios parameter creator
+ * @export
+ */
+export const ProductUserApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ *
+ * @summary User Profile Filter By Marketplace Pid
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Source} source The marketplace to search
+ * @param {Array<string>} pid The user\&#39;s marketplace PID. Supports multiple params
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet: async (productId: string, source: Source, pid: Array<string>, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet', 'productId', productId)
+ // verify required parameter 'source' is not null or undefined
+ assertParamExists('userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet', 'source', source)
+ // verify required parameter 'pid' is not null or undefined
+ assertParamExists('userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet', 'pid', pid)
+ const localVarPath = `/{product_id}/user/by-marketplace-pid/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (source !== undefined) {
+ localVarQueryParameter['source'] = source;
+ }
+
+ if (pid) {
+ localVarQueryParameter['pid'] = pid;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileProductIdUserProductUserIdProfileGet: async (productId: string, productUserId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('userProfileProductIdUserProductUserIdProfileGet', 'productId', productId)
+ // verify required parameter 'productUserId' is not null or undefined
+ assertParamExists('userProfileProductIdUserProductUserIdProfileGet', 'productUserId', productUserId)
+ const localVarPath = `/{product_id}/user/{product_user_id}/profile/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"product_user_id"}}`, encodeURIComponent(String(productUserId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @summary User Profile Update
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {UserProfileUpdateRequest} userProfileUpdateRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileUpdateProductIdUserProductUserIdProfilePatch: async (productId: string, productUserId: string, userProfileUpdateRequest: UserProfileUpdateRequest, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('userProfileUpdateProductIdUserProductUserIdProfilePatch', 'productId', productId)
+ // verify required parameter 'productUserId' is not null or undefined
+ assertParamExists('userProfileUpdateProductIdUserProductUserIdProfilePatch', 'productUserId', productUserId)
+ // verify required parameter 'userProfileUpdateRequest' is not null or undefined
+ assertParamExists('userProfileUpdateProductIdUserProductUserIdProfilePatch', 'userProfileUpdateRequest', userProfileUpdateRequest)
+ const localVarPath = `/{product_id}/user/{product_user_id}/profile/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"product_user_id"}}`, encodeURIComponent(String(productUserId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(userProfileUpdateRequest, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * ProductUserApi - functional programming interface
+ * @export
+ */
+export const ProductUserApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = ProductUserApiAxiosParamCreator(configuration)
+ return {
+ /**
+ *
+ * @summary User Profile Filter By Marketplace Pid
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Source} source The marketplace to search
+ * @param {Array<string>} pid The user\&#39;s marketplace PID. Supports multiple params
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(productId: string, source: Source, pid: Array<string>, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserProfilesResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(productId, source, pid, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProductUserApi.userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async userProfileProductIdUserProductUserIdProfileGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserProfileResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.userProfileProductIdUserProductUserIdProfileGet(productId, productUserId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProductUserApi.userProfileProductIdUserProductUserIdProfileGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @summary User Profile Update
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {UserProfileUpdateRequest} userProfileUpdateRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async userProfileUpdateProductIdUserProductUserIdProfilePatch(productId: string, productUserId: string, userProfileUpdateRequest: UserProfileUpdateRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StatusResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.userProfileUpdateProductIdUserProductUserIdProfilePatch(productId, productUserId, userProfileUpdateRequest, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProductUserApi.userProfileUpdateProductIdUserProductUserIdProfilePatch']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * ProductUserApi - factory interface
+ * @export
+ */
+export const ProductUserApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = ProductUserApiFp(configuration)
+ return {
+ /**
+ *
+ * @summary User Profile Filter By Marketplace Pid
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Source} source The marketplace to search
+ * @param {Array<string>} pid The user\&#39;s marketplace PID. Supports multiple params
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(productId: string, source: Source, pid: Array<string>, options?: RawAxiosRequestConfig): AxiosPromise<UserProfilesResponse> {
+ return localVarFp.userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(productId, source, pid, options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileProductIdUserProductUserIdProfileGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig): AxiosPromise<UserProfileResponse> {
+ return localVarFp.userProfileProductIdUserProductUserIdProfileGet(productId, productUserId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @summary User Profile Update
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {UserProfileUpdateRequest} userProfileUpdateRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileUpdateProductIdUserProductUserIdProfilePatch(productId: string, productUserId: string, userProfileUpdateRequest: UserProfileUpdateRequest, options?: RawAxiosRequestConfig): AxiosPromise<StatusResponse> {
+ return localVarFp.userProfileUpdateProductIdUserProductUserIdProfilePatch(productId, productUserId, userProfileUpdateRequest, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * ProductUserApi - object-oriented interface
+ * @export
+ * @class ProductUserApi
+ * @extends {BaseAPI}
+ */
+export class ProductUserApi extends BaseAPI {
+ /**
+ *
+ * @summary User Profile Filter By Marketplace Pid
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Source} source The marketplace to search
+ * @param {Array<string>} pid The user\&#39;s marketplace PID. Supports multiple params
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProductUserApi
+ */
+ public userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(productId: string, source: Source, pid: Array<string>, options?: RawAxiosRequestConfig) {
+ return ProductUserApiFp(this.configuration).userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(productId, source, pid, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProductUserApi
+ */
+ public userProfileProductIdUserProductUserIdProfileGet(productId: string, productUserId: string, options?: RawAxiosRequestConfig) {
+ return ProductUserApiFp(this.configuration).userProfileProductIdUserProductUserIdProfileGet(productId, productUserId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @summary User Profile Update
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} productUserId A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {UserProfileUpdateRequest} userProfileUpdateRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProductUserApi
+ */
+ public userProfileUpdateProductIdUserProductUserIdProfilePatch(productId: string, productUserId: string, userProfileUpdateRequest: UserProfileUpdateRequest, options?: RawAxiosRequestConfig) {
+ return ProductUserApiFp(this.configuration).userProfileUpdateProductIdUserProductUserIdProfilePatch(productId, productUserId, userProfileUpdateRequest, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * ProfilingQuestionsApi - axios parameter creator
+ * @export
+ */
+export const ProfilingQuestionsApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Gets a list of profiling questions to ask this user. These questions are, as of right now, unanswered. Once a question is answered, it (and any other question whose answer is inferred from other answers) is removed from the list. The questions returned are ordered by importance (the key task_score) in descending order.
+ * @summary Get Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {number} [limit] Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions\&#39; importance.
+ * @param {boolean} [isGrs] If it\&#39;s the GRS system.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getProfilingQuestionsProductIdProfilingQuestionsGet: async (productId: string, bpuid: string, ip?: string, countryIso?: string, languageIso?: string, limit?: number, isGrs?: boolean, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getProfilingQuestionsProductIdProfilingQuestionsGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('getProfilingQuestionsProductIdProfilingQuestionsGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/profiling-questions/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (ip !== undefined) {
+ localVarQueryParameter['ip'] = ip;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languageIso !== undefined) {
+ localVarQueryParameter['language_iso'] = languageIso;
+ }
+
+ if (limit !== undefined) {
+ localVarQueryParameter['limit'] = limit;
+ }
+
+ if (isGrs !== undefined) {
+ localVarQueryParameter['is_grs'] = isGrs;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Get UPK Ontology (list of properties, property info, and allowed values)
+ * @summary Profiling Info
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ profilingInfoProductIdProfilingInfoGet: async (productId: string, countryIso: string, languageIso?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('profilingInfoProductIdProfilingInfoGet', 'productId', productId)
+ // verify required parameter 'countryIso' is not null or undefined
+ assertParamExists('profilingInfoProductIdProfilingInfoGet', 'countryIso', countryIso)
+ const localVarPath = `/{product_id}/profiling-info/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languageIso !== undefined) {
+ localVarQueryParameter['language_iso'] = languageIso;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Send the answers to one or more of these questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\"
+ * @summary Submit Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost} bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+ * @param {string} [sessionId] The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional.
+ * @param {boolean} [async] For internal use.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ submitProfilingQuestionsProductIdProfilingQuestionsPost: async (productId: string, bpuid: string, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost: BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId?: string, async?: boolean, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('submitProfilingQuestionsProductIdProfilingQuestionsPost', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('submitProfilingQuestionsProductIdProfilingQuestionsPost', 'bpuid', bpuid)
+ // verify required parameter 'bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost' is not null or undefined
+ assertParamExists('submitProfilingQuestionsProductIdProfilingQuestionsPost', 'bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost', bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost)
+ const localVarPath = `/{product_id}/profiling-questions/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (sessionId !== undefined) {
+ localVarQueryParameter['session_id'] = sessionId;
+ }
+
+ if (async !== undefined) {
+ localVarQueryParameter['async'] = async;
+ }
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileProductIdUserProfileGet: async (productId: string, bpuid: string, countryIso: string, languageIso?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('userProfileProductIdUserProfileGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('userProfileProductIdUserProfileGet', 'bpuid', bpuid)
+ // verify required parameter 'countryIso' is not null or undefined
+ assertParamExists('userProfileProductIdUserProfileGet', 'countryIso', countryIso)
+ const localVarPath = `/{product_id}/user-profile/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (countryIso !== undefined) {
+ localVarQueryParameter['country_iso'] = countryIso;
+ }
+
+ if (languageIso !== undefined) {
+ localVarQueryParameter['language_iso'] = languageIso;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * ProfilingQuestionsApi - functional programming interface
+ * @export
+ */
+export const ProfilingQuestionsApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = ProfilingQuestionsApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Gets a list of profiling questions to ask this user. These questions are, as of right now, unanswered. Once a question is answered, it (and any other question whose answer is inferred from other answers) is removed from the list. The questions returned are ordered by importance (the key task_score) in descending order.
+ * @summary Get Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {number} [limit] Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions\&#39; importance.
+ * @param {boolean} [isGrs] If it\&#39;s the GRS system.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getProfilingQuestionsProductIdProfilingQuestionsGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languageIso?: string, limit?: number, isGrs?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UpkQuestionResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getProfilingQuestionsProductIdProfilingQuestionsGet(productId, bpuid, ip, countryIso, languageIso, limit, isGrs, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProfilingQuestionsApi.getProfilingQuestionsProductIdProfilingQuestionsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Get UPK Ontology (list of properties, property info, and allowed values)
+ * @summary Profiling Info
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async profilingInfoProductIdProfilingInfoGet(productId: string, countryIso: string, languageIso?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ProfilingInfoResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.profilingInfoProductIdProfilingInfoGet(productId, countryIso, languageIso, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProfilingQuestionsApi.profilingInfoProductIdProfilingInfoGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Send the answers to one or more of these questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\"
+ * @summary Submit Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost} bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+ * @param {string} [sessionId] The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional.
+ * @param {boolean} [async] For internal use.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async submitProfilingQuestionsProductIdProfilingQuestionsPost(productId: string, bpuid: string, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost: BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId?: string, async?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StatusResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.submitProfilingQuestionsProductIdProfilingQuestionsPost(productId, bpuid, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId, async, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProfilingQuestionsApi.submitProfilingQuestionsProductIdProfilingQuestionsPost']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async userProfileProductIdUserProfileGet(productId: string, bpuid: string, countryIso: string, languageIso?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserInfoResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.userProfileProductIdUserProfileGet(productId, bpuid, countryIso, languageIso, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ProfilingQuestionsApi.userProfileProductIdUserProfileGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * ProfilingQuestionsApi - factory interface
+ * @export
+ */
+export const ProfilingQuestionsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = ProfilingQuestionsApiFp(configuration)
+ return {
+ /**
+ * Gets a list of profiling questions to ask this user. These questions are, as of right now, unanswered. Once a question is answered, it (and any other question whose answer is inferred from other answers) is removed from the list. The questions returned are ordered by importance (the key task_score) in descending order.
+ * @summary Get Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {number} [limit] Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions\&#39; importance.
+ * @param {boolean} [isGrs] If it\&#39;s the GRS system.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getProfilingQuestionsProductIdProfilingQuestionsGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languageIso?: string, limit?: number, isGrs?: boolean, options?: RawAxiosRequestConfig): AxiosPromise<UpkQuestionResponse> {
+ return localVarFp.getProfilingQuestionsProductIdProfilingQuestionsGet(productId, bpuid, ip, countryIso, languageIso, limit, isGrs, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Get UPK Ontology (list of properties, property info, and allowed values)
+ * @summary Profiling Info
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ profilingInfoProductIdProfilingInfoGet(productId: string, countryIso: string, languageIso?: string, options?: RawAxiosRequestConfig): AxiosPromise<ProfilingInfoResponse> {
+ return localVarFp.profilingInfoProductIdProfilingInfoGet(productId, countryIso, languageIso, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Send the answers to one or more of these questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\"
+ * @summary Submit Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost} bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+ * @param {string} [sessionId] The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional.
+ * @param {boolean} [async] For internal use.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ submitProfilingQuestionsProductIdProfilingQuestionsPost(productId: string, bpuid: string, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost: BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId?: string, async?: boolean, options?: RawAxiosRequestConfig): AxiosPromise<StatusResponse> {
+ return localVarFp.submitProfilingQuestionsProductIdProfilingQuestionsPost(productId, bpuid, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId, async, options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ userProfileProductIdUserProfileGet(productId: string, bpuid: string, countryIso: string, languageIso?: string, options?: RawAxiosRequestConfig): AxiosPromise<UserInfoResponse> {
+ return localVarFp.userProfileProductIdUserProfileGet(productId, bpuid, countryIso, languageIso, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * ProfilingQuestionsApi - object-oriented interface
+ * @export
+ * @class ProfilingQuestionsApi
+ * @extends {BaseAPI}
+ */
+export class ProfilingQuestionsApi extends BaseAPI {
+ /**
+ * Gets a list of profiling questions to ask this user. These questions are, as of right now, unanswered. Once a question is answered, it (and any other question whose answer is inferred from other answers) is removed from the list. The questions returned are ordered by importance (the key task_score) in descending order.
+ * @summary Get Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [ip] Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided.
+ * @param {string} [countryIso] Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {number} [limit] Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions\&#39; importance.
+ * @param {boolean} [isGrs] If it\&#39;s the GRS system.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProfilingQuestionsApi
+ */
+ public getProfilingQuestionsProductIdProfilingQuestionsGet(productId: string, bpuid: string, ip?: string, countryIso?: string, languageIso?: string, limit?: number, isGrs?: boolean, options?: RawAxiosRequestConfig) {
+ return ProfilingQuestionsApiFp(this.configuration).getProfilingQuestionsProductIdProfilingQuestionsGet(productId, bpuid, ip, countryIso, languageIso, limit, isGrs, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Get UPK Ontology (list of properties, property info, and allowed values)
+ * @summary Profiling Info
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProfilingQuestionsApi
+ */
+ public profilingInfoProductIdProfilingInfoGet(productId: string, countryIso: string, languageIso?: string, options?: RawAxiosRequestConfig) {
+ return ProfilingQuestionsApiFp(this.configuration).profilingInfoProductIdProfilingInfoGet(productId, countryIso, languageIso, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Send the answers to one or more of these questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\"
+ * @summary Submit Profiling Questions
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost} bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+ * @param {string} [sessionId] The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional.
+ * @param {boolean} [async] For internal use.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProfilingQuestionsApi
+ */
+ public submitProfilingQuestionsProductIdProfilingQuestionsPost(productId: string, bpuid: string, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost: BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId?: string, async?: boolean, options?: RawAxiosRequestConfig) {
+ return ProfilingQuestionsApiFp(this.configuration).submitProfilingQuestionsProductIdProfilingQuestionsPost(productId, bpuid, bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost, sessionId, async, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @summary User Profile
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} countryIso Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase)
+ * @param {string} [languageIso] Respondent\&#39;s desired language (ISO 639-2/B, lowercase)
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ProfilingQuestionsApi
+ */
+ public userProfileProductIdUserProfileGet(productId: string, bpuid: string, countryIso: string, languageIso?: string, options?: RawAxiosRequestConfig) {
+ return ProfilingQuestionsApiFp(this.configuration).userProfileProductIdUserProfileGet(productId, bpuid, countryIso, languageIso, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * ReportApi - axios parameter creator
+ * @export
+ */
+export const ReportApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Send a \"Task Report\" for a respondent\'s latest started survey, regardless of the survey\'s outcome. Task Reports cannot be provided for task attempts by tsid, or through any other method, they must be given immediately after the respondent\'s task attempt. If a latest attempt can\'t be found, a ReportTaskResponse is still returned. If multiple reasons want to be provided, they should be done at the same time. If multiple reports are given for the same latest started task, the note attribute will be overwritten, while the new unique reasons will be appended to the task attempt. Task Report system contributions by client applications are immediately leveraged to aid yield management strategies. For those reasons, it\'s important that the respondent submits a Task Report as soon as possible and applications doesn\'t offload this request for a later time. Task Report timestamps are a critical component of understanding a Task experience for a respondent. For the BP to tell us about a bad survey they want to report The POSTed data looks like: { \'bpuid\': \'1234\', \'reasons\': [2], \'notes\': \"This survey was the worst!\" } Returns {\'status\': \'success\', \'msg\': error_msg}
+ * @summary Report Task
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {ReportTask} reportTask
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ reportTaskProductIdReportPost: async (productId: string, reportTask: ReportTask, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('reportTaskProductIdReportPost', 'productId', productId)
+ // verify required parameter 'reportTask' is not null or undefined
+ assertParamExists('reportTaskProductIdReportPost', 'reportTask', reportTask)
+ const localVarPath = `/{product_id}/report/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(reportTask, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * ReportApi - functional programming interface
+ * @export
+ */
+export const ReportApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = ReportApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Send a \"Task Report\" for a respondent\'s latest started survey, regardless of the survey\'s outcome. Task Reports cannot be provided for task attempts by tsid, or through any other method, they must be given immediately after the respondent\'s task attempt. If a latest attempt can\'t be found, a ReportTaskResponse is still returned. If multiple reasons want to be provided, they should be done at the same time. If multiple reports are given for the same latest started task, the note attribute will be overwritten, while the new unique reasons will be appended to the task attempt. Task Report system contributions by client applications are immediately leveraged to aid yield management strategies. For those reasons, it\'s important that the respondent submits a Task Report as soon as possible and applications doesn\'t offload this request for a later time. Task Report timestamps are a critical component of understanding a Task experience for a respondent. For the BP to tell us about a bad survey they want to report The POSTed data looks like: { \'bpuid\': \'1234\', \'reasons\': [2], \'notes\': \"This survey was the worst!\" } Returns {\'status\': \'success\', \'msg\': error_msg}
+ * @summary Report Task
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {ReportTask} reportTask
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async reportTaskProductIdReportPost(productId: string, reportTask: ReportTask, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StatusResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.reportTaskProductIdReportPost(productId, reportTask, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ReportApi.reportTaskProductIdReportPost']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * ReportApi - factory interface
+ * @export
+ */
+export const ReportApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = ReportApiFp(configuration)
+ return {
+ /**
+ * Send a \"Task Report\" for a respondent\'s latest started survey, regardless of the survey\'s outcome. Task Reports cannot be provided for task attempts by tsid, or through any other method, they must be given immediately after the respondent\'s task attempt. If a latest attempt can\'t be found, a ReportTaskResponse is still returned. If multiple reasons want to be provided, they should be done at the same time. If multiple reports are given for the same latest started task, the note attribute will be overwritten, while the new unique reasons will be appended to the task attempt. Task Report system contributions by client applications are immediately leveraged to aid yield management strategies. For those reasons, it\'s important that the respondent submits a Task Report as soon as possible and applications doesn\'t offload this request for a later time. Task Report timestamps are a critical component of understanding a Task experience for a respondent. For the BP to tell us about a bad survey they want to report The POSTed data looks like: { \'bpuid\': \'1234\', \'reasons\': [2], \'notes\': \"This survey was the worst!\" } Returns {\'status\': \'success\', \'msg\': error_msg}
+ * @summary Report Task
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {ReportTask} reportTask
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ reportTaskProductIdReportPost(productId: string, reportTask: ReportTask, options?: RawAxiosRequestConfig): AxiosPromise<StatusResponse> {
+ return localVarFp.reportTaskProductIdReportPost(productId, reportTask, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * ReportApi - object-oriented interface
+ * @export
+ * @class ReportApi
+ * @extends {BaseAPI}
+ */
+export class ReportApi extends BaseAPI {
+ /**
+ * Send a \"Task Report\" for a respondent\'s latest started survey, regardless of the survey\'s outcome. Task Reports cannot be provided for task attempts by tsid, or through any other method, they must be given immediately after the respondent\'s task attempt. If a latest attempt can\'t be found, a ReportTaskResponse is still returned. If multiple reasons want to be provided, they should be done at the same time. If multiple reports are given for the same latest started task, the note attribute will be overwritten, while the new unique reasons will be appended to the task attempt. Task Report system contributions by client applications are immediately leveraged to aid yield management strategies. For those reasons, it\'s important that the respondent submits a Task Report as soon as possible and applications doesn\'t offload this request for a later time. Task Report timestamps are a critical component of understanding a Task experience for a respondent. For the BP to tell us about a bad survey they want to report The POSTed data looks like: { \'bpuid\': \'1234\', \'reasons\': [2], \'notes\': \"This survey was the worst!\" } Returns {\'status\': \'success\', \'msg\': error_msg}
+ * @summary Report Task
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {ReportTask} reportTask
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof ReportApi
+ */
+ public reportTaskProductIdReportPost(productId: string, reportTask: ReportTask, options?: RawAxiosRequestConfig) {
+ return ReportApiFp(this.configuration).reportTaskProductIdReportPost(productId, reportTask, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * StatusApi - axios parameter creator
+ * @export
+ */
+export const StatusApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Retrieve the status of a session by a specific Task Status ID (`tsid`) that is provided in the redirect. Given a `tsid`, get back the status of the wall event. This endpoint conflates the idea of a wall event and a session, but for these purposes, the status and payout of the last wall event in a session equals the status and payout for the session.
+ * @summary Get Task Status
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} tsid A unique identifier for the session
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getTaskStatusProductIdStatusTsidGet: async (productId: string, tsid: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getTaskStatusProductIdStatusTsidGet', 'productId', productId)
+ // verify required parameter 'tsid' is not null or undefined
+ assertParamExists('getTaskStatusProductIdStatusTsidGet', 'tsid', tsid)
+ const localVarPath = `/{product_id}/status/{tsid}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"tsid"}}`, encodeURIComponent(String(tsid)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @summary List Task Statuses
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} [bpuid] A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user.
+ * @param {StartedAfter} [startedAfter] Retrieve sessions which were started after this timestamp. If &#x60;NULL&#x60;, default is 10 days ago.
+ * @param {StartedBefore} [startedBefore] Retrieve sessions which were started before this timestamp. If &#x60;NULL&#x60;, default is now.
+ * @param {number} [status] Filter for sessions with this status. See Task Status for description of status.
+ * @param {boolean} [reconciled] Only retrieve sessions that have been adjusted. If &#x60;reconciled&#x60; is True, &#x60;adjusted_after&#x60; is required.
+ * @param {AdjustedAfter} [adjustedAfter] Retrieve sessions which were adjusted after this timestamp.
+ * @param {AdjustedBefore} [adjustedBefore] Retrieve sessions which were adjusted before this timestamp. Default is now.
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listTaskStatusesProductIdStatusGet: async (productId: string, bpuid?: string, startedAfter?: StartedAfter, startedBefore?: StartedBefore, status?: number, reconciled?: boolean, adjustedAfter?: AdjustedAfter, adjustedBefore?: AdjustedBefore, orderBy?: string, page?: number, size?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('listTaskStatusesProductIdStatusGet', 'productId', productId)
+ const localVarPath = `/{product_id}/status/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (startedAfter !== undefined) {
+ for (const [key, value] of Object.entries(startedAfter)) {
+ localVarQueryParameter[key] = value;
+ }
+ }
+
+ if (startedBefore !== undefined) {
+ for (const [key, value] of Object.entries(startedBefore)) {
+ localVarQueryParameter[key] = value;
+ }
+ }
+
+ if (status !== undefined) {
+ localVarQueryParameter['status'] = status;
+ }
+
+ if (reconciled !== undefined) {
+ localVarQueryParameter['reconciled'] = reconciled;
+ }
+
+ if (adjustedAfter !== undefined) {
+ for (const [key, value] of Object.entries(adjustedAfter)) {
+ localVarQueryParameter[key] = value;
+ }
+ }
+
+ if (adjustedBefore !== undefined) {
+ for (const [key, value] of Object.entries(adjustedBefore)) {
+ localVarQueryParameter[key] = value;
+ }
+ }
+
+ if (orderBy !== undefined) {
+ localVarQueryParameter['order_by'] = orderBy;
+ }
+
+ if (page !== undefined) {
+ localVarQueryParameter['page'] = page;
+ }
+
+ if (size !== undefined) {
+ localVarQueryParameter['size'] = size;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * StatusApi - functional programming interface
+ * @export
+ */
+export const StatusApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = StatusApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Retrieve the status of a session by a specific Task Status ID (`tsid`) that is provided in the redirect. Given a `tsid`, get back the status of the wall event. This endpoint conflates the idea of a wall event and a session, but for these purposes, the status and payout of the last wall event in a session equals the status and payout for the session.
+ * @summary Get Task Status
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} tsid A unique identifier for the session
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getTaskStatusProductIdStatusTsidGet(productId: string, tsid: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TaskStatusResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getTaskStatusProductIdStatusTsidGet(productId, tsid, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['StatusApi.getTaskStatusProductIdStatusTsidGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @summary List Task Statuses
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} [bpuid] A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user.
+ * @param {StartedAfter} [startedAfter] Retrieve sessions which were started after this timestamp. If &#x60;NULL&#x60;, default is 10 days ago.
+ * @param {StartedBefore} [startedBefore] Retrieve sessions which were started before this timestamp. If &#x60;NULL&#x60;, default is now.
+ * @param {number} [status] Filter for sessions with this status. See Task Status for description of status.
+ * @param {boolean} [reconciled] Only retrieve sessions that have been adjusted. If &#x60;reconciled&#x60; is True, &#x60;adjusted_after&#x60; is required.
+ * @param {AdjustedAfter} [adjustedAfter] Retrieve sessions which were adjusted after this timestamp.
+ * @param {AdjustedBefore} [adjustedBefore] Retrieve sessions which were adjusted before this timestamp. Default is now.
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async listTaskStatusesProductIdStatusGet(productId: string, bpuid?: string, startedAfter?: StartedAfter, startedBefore?: StartedBefore, status?: number, reconciled?: boolean, adjustedAfter?: AdjustedAfter, adjustedBefore?: AdjustedBefore, orderBy?: string, page?: number, size?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TasksStatusResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listTaskStatusesProductIdStatusGet(productId, bpuid, startedAfter, startedBefore, status, reconciled, adjustedAfter, adjustedBefore, orderBy, page, size, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['StatusApi.listTaskStatusesProductIdStatusGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * StatusApi - factory interface
+ * @export
+ */
+export const StatusApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = StatusApiFp(configuration)
+ return {
+ /**
+ * Retrieve the status of a session by a specific Task Status ID (`tsid`) that is provided in the redirect. Given a `tsid`, get back the status of the wall event. This endpoint conflates the idea of a wall event and a session, but for these purposes, the status and payout of the last wall event in a session equals the status and payout for the session.
+ * @summary Get Task Status
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} tsid A unique identifier for the session
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getTaskStatusProductIdStatusTsidGet(productId: string, tsid: string, options?: RawAxiosRequestConfig): AxiosPromise<TaskStatusResponse> {
+ return localVarFp.getTaskStatusProductIdStatusTsidGet(productId, tsid, options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @summary List Task Statuses
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} [bpuid] A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user.
+ * @param {StartedAfter} [startedAfter] Retrieve sessions which were started after this timestamp. If &#x60;NULL&#x60;, default is 10 days ago.
+ * @param {StartedBefore} [startedBefore] Retrieve sessions which were started before this timestamp. If &#x60;NULL&#x60;, default is now.
+ * @param {number} [status] Filter for sessions with this status. See Task Status for description of status.
+ * @param {boolean} [reconciled] Only retrieve sessions that have been adjusted. If &#x60;reconciled&#x60; is True, &#x60;adjusted_after&#x60; is required.
+ * @param {AdjustedAfter} [adjustedAfter] Retrieve sessions which were adjusted after this timestamp.
+ * @param {AdjustedBefore} [adjustedBefore] Retrieve sessions which were adjusted before this timestamp. Default is now.
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ listTaskStatusesProductIdStatusGet(productId: string, bpuid?: string, startedAfter?: StartedAfter, startedBefore?: StartedBefore, status?: number, reconciled?: boolean, adjustedAfter?: AdjustedAfter, adjustedBefore?: AdjustedBefore, orderBy?: string, page?: number, size?: number, options?: RawAxiosRequestConfig): AxiosPromise<TasksStatusResponse> {
+ return localVarFp.listTaskStatusesProductIdStatusGet(productId, bpuid, startedAfter, startedBefore, status, reconciled, adjustedAfter, adjustedBefore, orderBy, page, size, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * StatusApi - object-oriented interface
+ * @export
+ * @class StatusApi
+ * @extends {BaseAPI}
+ */
+export class StatusApi extends BaseAPI {
+ /**
+ * Retrieve the status of a session by a specific Task Status ID (`tsid`) that is provided in the redirect. Given a `tsid`, get back the status of the wall event. This endpoint conflates the idea of a wall event and a session, but for these purposes, the status and payout of the last wall event in a session equals the status and payout for the session.
+ * @summary Get Task Status
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} tsid A unique identifier for the session
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof StatusApi
+ */
+ public getTaskStatusProductIdStatusTsidGet(productId: string, tsid: string, options?: RawAxiosRequestConfig) {
+ return StatusApiFp(this.configuration).getTaskStatusProductIdStatusTsidGet(productId, tsid, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @summary List Task Statuses
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} [bpuid] A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user.
+ * @param {StartedAfter} [startedAfter] Retrieve sessions which were started after this timestamp. If &#x60;NULL&#x60;, default is 10 days ago.
+ * @param {StartedBefore} [startedBefore] Retrieve sessions which were started before this timestamp. If &#x60;NULL&#x60;, default is now.
+ * @param {number} [status] Filter for sessions with this status. See Task Status for description of status.
+ * @param {boolean} [reconciled] Only retrieve sessions that have been adjusted. If &#x60;reconciled&#x60; is True, &#x60;adjusted_after&#x60; is required.
+ * @param {AdjustedAfter} [adjustedAfter] Retrieve sessions which were adjusted after this timestamp.
+ * @param {AdjustedBefore} [adjustedBefore] Retrieve sessions which were adjusted before this timestamp. Default is now.
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof StatusApi
+ */
+ public listTaskStatusesProductIdStatusGet(productId: string, bpuid?: string, startedAfter?: StartedAfter, startedBefore?: StartedBefore, status?: number, reconciled?: boolean, adjustedAfter?: AdjustedAfter, adjustedBefore?: AdjustedBefore, orderBy?: string, page?: number, size?: number, options?: RawAxiosRequestConfig) {
+ return StatusApiFp(this.configuration).listTaskStatusesProductIdStatusGet(productId, bpuid, startedAfter, startedBefore, status, reconciled, adjustedAfter, adjustedBefore, orderBy, page, size, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * StreamsApi - axios parameter creator
+ * @export
+ */
+export const StreamsApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ *
+ * @summary Websocket Debug Page
+ * @param {string} productId
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ websocketDebugPageWsDebugGet: async (productId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('websocketDebugPageWsDebugGet', 'productId', productId)
+ const localVarPath = `/ws/debug/`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (productId !== undefined) {
+ localVarQueryParameter['product_id'] = productId;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * WebSocket endpoint: `/ws/events/` Protocol: - Client connects - Client sends a SubscribeMessage `{ kind: \"subscribe\", product_id: \"{product_id}\" }` - Server sends a PingMessage `{ kind: \"ping\" }` - Client must reply a PongMessage: `{ kind: \"pong\" }` - Other messages are EventMessage or StatsMessage Close on missing pong after 20s.
+ * @summary Websocket Events Docs
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ websocketEventsDocsWsEventsDocsGet: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ const localVarPath = `/ws/events/docs/`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * StreamsApi - functional programming interface
+ * @export
+ */
+export const StreamsApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = StreamsApiAxiosParamCreator(configuration)
+ return {
+ /**
+ *
+ * @summary Websocket Debug Page
+ * @param {string} productId
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async websocketDebugPageWsDebugGet(productId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<string>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.websocketDebugPageWsDebugGet(productId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['StreamsApi.websocketDebugPageWsDebugGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * WebSocket endpoint: `/ws/events/` Protocol: - Client connects - Client sends a SubscribeMessage `{ kind: \"subscribe\", product_id: \"{product_id}\" }` - Server sends a PingMessage `{ kind: \"ping\" }` - Client must reply a PongMessage: `{ kind: \"pong\" }` - Other messages are EventMessage or StatsMessage Close on missing pong after 20s.
+ * @summary Websocket Events Docs
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async websocketEventsDocsWsEventsDocsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ResponseWebsocketEventsDocsWsEventsDocsGet>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.websocketEventsDocsWsEventsDocsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['StreamsApi.websocketEventsDocsWsEventsDocsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * StreamsApi - factory interface
+ * @export
+ */
+export const StreamsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = StreamsApiFp(configuration)
+ return {
+ /**
+ *
+ * @summary Websocket Debug Page
+ * @param {string} productId
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ websocketDebugPageWsDebugGet(productId: string, options?: RawAxiosRequestConfig): AxiosPromise<string> {
+ return localVarFp.websocketDebugPageWsDebugGet(productId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * WebSocket endpoint: `/ws/events/` Protocol: - Client connects - Client sends a SubscribeMessage `{ kind: \"subscribe\", product_id: \"{product_id}\" }` - Server sends a PingMessage `{ kind: \"ping\" }` - Client must reply a PongMessage: `{ kind: \"pong\" }` - Other messages are EventMessage or StatsMessage Close on missing pong after 20s.
+ * @summary Websocket Events Docs
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ websocketEventsDocsWsEventsDocsGet(options?: RawAxiosRequestConfig): AxiosPromise<ResponseWebsocketEventsDocsWsEventsDocsGet> {
+ return localVarFp.websocketEventsDocsWsEventsDocsGet(options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * StreamsApi - object-oriented interface
+ * @export
+ * @class StreamsApi
+ * @extends {BaseAPI}
+ */
+export class StreamsApi extends BaseAPI {
+ /**
+ *
+ * @summary Websocket Debug Page
+ * @param {string} productId
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof StreamsApi
+ */
+ public websocketDebugPageWsDebugGet(productId: string, options?: RawAxiosRequestConfig) {
+ return StreamsApiFp(this.configuration).websocketDebugPageWsDebugGet(productId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * WebSocket endpoint: `/ws/events/` Protocol: - Client connects - Client sends a SubscribeMessage `{ kind: \"subscribe\", product_id: \"{product_id}\" }` - Server sends a PingMessage `{ kind: \"ping\" }` - Client must reply a PongMessage: `{ kind: \"pong\" }` - Other messages are EventMessage or StatsMessage Close on missing pong after 20s.
+ * @summary Websocket Events Docs
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof StreamsApi
+ */
+ public websocketEventsDocsWsEventsDocsGet(options?: RawAxiosRequestConfig) {
+ return StreamsApiFp(this.configuration).websocketEventsDocsWsEventsDocsGet(options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * WalletApi - axios parameter creator
+ * @export
+ */
+export const WalletApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * A user can only have 1 unique Cashout Method of any type at a time (eg. they can\'t create multiple paypal payout methods). Cashout Methods cannot be edited, they can only be created or deleted. Creating different Cashout Methods will require type-dependent request data attributes in order to be successfully created. Currently only creating paypal or Cash in Mail cashout methods are supported
+ * @summary Create Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Body} body
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ createCashoutMethodProductIdCashoutMethodsPost: async (productId: string, body: Body, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('createCashoutMethodProductIdCashoutMethodsPost', 'productId', productId)
+ // verify required parameter 'body' is not null or undefined
+ assertParamExists('createCashoutMethodProductIdCashoutMethodsPost', 'body', body)
+ const localVarPath = `/{product_id}/cashout_methods/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Delete a cashout method
+ * @summary Delete Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method to delete
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete: async (productId: string, cashoutMethodId: string, bpuid: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete', 'productId', productId)
+ // verify required parameter 'cashoutMethodId' is not null or undefined
+ assertParamExists('deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete', 'cashoutMethodId', cashoutMethodId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/cashout_methods/{cashout_method_id}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"cashout_method_id"}}`, encodeURIComponent(String(cashoutMethodId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Retrieve the details for a specific Cashout event
+ * @summary Get Cashout Detail
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutId The cashout event ID
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCashoutDetailProductIdCashoutCashoutIdGet: async (productId: string, cashoutId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getCashoutDetailProductIdCashoutCashoutIdGet', 'productId', productId)
+ // verify required parameter 'cashoutId' is not null or undefined
+ assertParamExists('getCashoutDetailProductIdCashoutCashoutIdGet', 'cashoutId', cashoutId)
+ const localVarPath = `/{product_id}/cashout/{cashout_id}/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"cashout_id"}}`, encodeURIComponent(String(cashoutId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Retrieve the current available mechanisms that a user can use to retrieve funds.
+ * @summary Get Cashout Methods
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCashoutMethodsProductIdCashoutMethodsGet: async (productId: string, bpuid: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getCashoutMethodsProductIdCashoutMethodsGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('getCashoutMethodsProductIdCashoutMethodsGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/cashout_methods/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Use this function to get the \"value\" (in local currency, e.g. CAD, BTC) for this cashout_method, for amount (in USD cents).
+ * @summary Get Expected Redemption Value
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method
+ * @param {number} amount (USD cents) The amount to convert
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet: async (productId: string, cashoutMethodId: string, amount: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet', 'productId', productId)
+ // verify required parameter 'cashoutMethodId' is not null or undefined
+ assertParamExists('getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet', 'cashoutMethodId', cashoutMethodId)
+ // verify required parameter 'amount' is not null or undefined
+ assertParamExists('getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet', 'amount', amount)
+ const localVarPath = `/{product_id}/cashout_method/{cashout_method_id}/value/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)))
+ .replace(`{${"cashout_method_id"}}`, encodeURIComponent(String(cashoutMethodId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (amount !== undefined) {
+ localVarQueryParameter['amount'] = amount;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Return array of user events that altered their wallet balance
+ * @summary Get User Transaction History
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [createdAfter] Filter transactions created after this timestamp
+ * @param {string} [createdBefore] Filter transactions created before this timestamp
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getUserTransactionHistoryProductIdTransactionHistoryGet: async (productId: string, bpuid: string, createdAfter?: string, createdBefore?: string, orderBy?: string, page?: number, size?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getUserTransactionHistoryProductIdTransactionHistoryGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('getUserTransactionHistoryProductIdTransactionHistoryGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/transaction_history/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+ if (createdAfter !== undefined) {
+ localVarQueryParameter['created_after'] = (createdAfter as any instanceof Date) ?
+ (createdAfter as any).toISOString() :
+ createdAfter;
+ }
+
+ if (createdBefore !== undefined) {
+ localVarQueryParameter['created_before'] = (createdBefore as any instanceof Date) ?
+ (createdBefore as any).toISOString() :
+ createdBefore;
+ }
+
+ if (orderBy !== undefined) {
+ localVarQueryParameter['order_by'] = orderBy;
+ }
+
+ if (page !== undefined) {
+ localVarQueryParameter['page'] = page;
+ }
+
+ if (size !== undefined) {
+ localVarQueryParameter['size'] = size;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Retrieve the current balance of a respondent\'s wallet balance for display
+ * @summary Get User Wallet Balance
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getUserWalletBalanceProductIdWalletGet: async (productId: string, bpuid: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('getUserWalletBalanceProductIdWalletGet', 'productId', productId)
+ // verify required parameter 'bpuid' is not null or undefined
+ assertParamExists('getUserWalletBalanceProductIdWalletGet', 'bpuid', bpuid)
+ const localVarPath = `/{product_id}/wallet/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ if (bpuid !== undefined) {
+ localVarQueryParameter['bpuid'] = bpuid;
+ }
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Request a cashout taken from a user\'s available wallet balance, to be paid via a particular cashout method.
+ * @summary Submit User Cashout
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {CreateCashoutRequest} createCashoutRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ submitUserCashoutProductIdCashoutPost: async (productId: string, createCashoutRequest: CreateCashoutRequest, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
+ // verify required parameter 'productId' is not null or undefined
+ assertParamExists('submitUserCashoutProductIdCashoutPost', 'productId', productId)
+ // verify required parameter 'createCashoutRequest' is not null or undefined
+ assertParamExists('submitUserCashoutProductIdCashoutPost', 'createCashoutRequest', createCashoutRequest)
+ const localVarPath = `/{product_id}/cashout/`
+ .replace(`{${"product_id"}}`, encodeURIComponent(String(productId)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+
+
+ localVarHeaderParameter['Content-Type'] = 'application/json';
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+ localVarRequestOptions.data = serializeDataIfNeeded(createCashoutRequest, localVarRequestOptions, configuration)
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * WalletApi - functional programming interface
+ * @export
+ */
+export const WalletApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = WalletApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * A user can only have 1 unique Cashout Method of any type at a time (eg. they can\'t create multiple paypal payout methods). Cashout Methods cannot be edited, they can only be created or deleted. Creating different Cashout Methods will require type-dependent request data attributes in order to be successfully created. Currently only creating paypal or Cash in Mail cashout methods are supported
+ * @summary Create Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Body} body
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async createCashoutMethodProductIdCashoutMethodsPost(productId: string, body: Body, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CashoutMethodResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.createCashoutMethodProductIdCashoutMethodsPost(productId, body, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.createCashoutMethodProductIdCashoutMethodsPost']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Delete a cashout method
+ * @summary Delete Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method to delete
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(productId: string, cashoutMethodId: string, bpuid: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<StatusResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(productId, cashoutMethodId, bpuid, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Retrieve the details for a specific Cashout event
+ * @summary Get Cashout Detail
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutId The cashout event ID
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCashoutDetailProductIdCashoutCashoutIdGet(productId: string, cashoutId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CashoutRequestResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCashoutDetailProductIdCashoutCashoutIdGet(productId, cashoutId, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.getCashoutDetailProductIdCashoutCashoutIdGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Retrieve the current available mechanisms that a user can use to retrieve funds.
+ * @summary Get Cashout Methods
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCashoutMethodsProductIdCashoutMethodsGet(productId: string, bpuid: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CashoutMethodsResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCashoutMethodsProductIdCashoutMethodsGet(productId, bpuid, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.getCashoutMethodsProductIdCashoutMethodsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Use this function to get the \"value\" (in local currency, e.g. CAD, BTC) for this cashout_method, for amount (in USD cents).
+ * @summary Get Expected Redemption Value
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method
+ * @param {number} amount (USD cents) The amount to convert
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(productId: string, cashoutMethodId: string, amount: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CashoutMethodForeignValueResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(productId, cashoutMethodId, amount, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Return array of user events that altered their wallet balance
+ * @summary Get User Transaction History
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [createdAfter] Filter transactions created after this timestamp
+ * @param {string} [createdBefore] Filter transactions created before this timestamp
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getUserTransactionHistoryProductIdTransactionHistoryGet(productId: string, bpuid: string, createdAfter?: string, createdBefore?: string, orderBy?: string, page?: number, size?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserLedgerTransactionsResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getUserTransactionHistoryProductIdTransactionHistoryGet(productId, bpuid, createdAfter, createdBefore, orderBy, page, size, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.getUserTransactionHistoryProductIdTransactionHistoryGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Retrieve the current balance of a respondent\'s wallet balance for display
+ * @summary Get User Wallet Balance
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getUserWalletBalanceProductIdWalletGet(productId: string, bpuid: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWalletBalanceResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getUserWalletBalanceProductIdWalletGet(productId, bpuid, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.getUserWalletBalanceProductIdWalletGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Request a cashout taken from a user\'s available wallet balance, to be paid via a particular cashout method.
+ * @summary Submit User Cashout
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {CreateCashoutRequest} createCashoutRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async submitUserCashoutProductIdCashoutPost(productId: string, createCashoutRequest: CreateCashoutRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CashoutRequestResponse>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.submitUserCashoutProductIdCashoutPost(productId, createCashoutRequest, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['WalletApi.submitUserCashoutProductIdCashoutPost']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * WalletApi - factory interface
+ * @export
+ */
+export const WalletApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = WalletApiFp(configuration)
+ return {
+ /**
+ * A user can only have 1 unique Cashout Method of any type at a time (eg. they can\'t create multiple paypal payout methods). Cashout Methods cannot be edited, they can only be created or deleted. Creating different Cashout Methods will require type-dependent request data attributes in order to be successfully created. Currently only creating paypal or Cash in Mail cashout methods are supported
+ * @summary Create Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Body} body
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ createCashoutMethodProductIdCashoutMethodsPost(productId: string, body: Body, options?: RawAxiosRequestConfig): AxiosPromise<CashoutMethodResponse> {
+ return localVarFp.createCashoutMethodProductIdCashoutMethodsPost(productId, body, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Delete a cashout method
+ * @summary Delete Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method to delete
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(productId: string, cashoutMethodId: string, bpuid: string, options?: RawAxiosRequestConfig): AxiosPromise<StatusResponse> {
+ return localVarFp.deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(productId, cashoutMethodId, bpuid, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Retrieve the details for a specific Cashout event
+ * @summary Get Cashout Detail
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutId The cashout event ID
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCashoutDetailProductIdCashoutCashoutIdGet(productId: string, cashoutId: string, options?: RawAxiosRequestConfig): AxiosPromise<CashoutRequestResponse> {
+ return localVarFp.getCashoutDetailProductIdCashoutCashoutIdGet(productId, cashoutId, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Retrieve the current available mechanisms that a user can use to retrieve funds.
+ * @summary Get Cashout Methods
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCashoutMethodsProductIdCashoutMethodsGet(productId: string, bpuid: string, options?: RawAxiosRequestConfig): AxiosPromise<CashoutMethodsResponse> {
+ return localVarFp.getCashoutMethodsProductIdCashoutMethodsGet(productId, bpuid, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Use this function to get the \"value\" (in local currency, e.g. CAD, BTC) for this cashout_method, for amount (in USD cents).
+ * @summary Get Expected Redemption Value
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method
+ * @param {number} amount (USD cents) The amount to convert
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(productId: string, cashoutMethodId: string, amount: number, options?: RawAxiosRequestConfig): AxiosPromise<CashoutMethodForeignValueResponse> {
+ return localVarFp.getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(productId, cashoutMethodId, amount, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Return array of user events that altered their wallet balance
+ * @summary Get User Transaction History
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [createdAfter] Filter transactions created after this timestamp
+ * @param {string} [createdBefore] Filter transactions created before this timestamp
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getUserTransactionHistoryProductIdTransactionHistoryGet(productId: string, bpuid: string, createdAfter?: string, createdBefore?: string, orderBy?: string, page?: number, size?: number, options?: RawAxiosRequestConfig): AxiosPromise<UserLedgerTransactionsResponse> {
+ return localVarFp.getUserTransactionHistoryProductIdTransactionHistoryGet(productId, bpuid, createdAfter, createdBefore, orderBy, page, size, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Retrieve the current balance of a respondent\'s wallet balance for display
+ * @summary Get User Wallet Balance
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getUserWalletBalanceProductIdWalletGet(productId: string, bpuid: string, options?: RawAxiosRequestConfig): AxiosPromise<UserWalletBalanceResponse> {
+ return localVarFp.getUserWalletBalanceProductIdWalletGet(productId, bpuid, options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Request a cashout taken from a user\'s available wallet balance, to be paid via a particular cashout method.
+ * @summary Submit User Cashout
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {CreateCashoutRequest} createCashoutRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ submitUserCashoutProductIdCashoutPost(productId: string, createCashoutRequest: CreateCashoutRequest, options?: RawAxiosRequestConfig): AxiosPromise<CashoutRequestResponse> {
+ return localVarFp.submitUserCashoutProductIdCashoutPost(productId, createCashoutRequest, options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * WalletApi - object-oriented interface
+ * @export
+ * @class WalletApi
+ * @extends {BaseAPI}
+ */
+export class WalletApi extends BaseAPI {
+ /**
+ * A user can only have 1 unique Cashout Method of any type at a time (eg. they can\'t create multiple paypal payout methods). Cashout Methods cannot be edited, they can only be created or deleted. Creating different Cashout Methods will require type-dependent request data attributes in order to be successfully created. Currently only creating paypal or Cash in Mail cashout methods are supported
+ * @summary Create Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {Body} body
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public createCashoutMethodProductIdCashoutMethodsPost(productId: string, body: Body, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).createCashoutMethodProductIdCashoutMethodsPost(productId, body, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Delete a cashout method
+ * @summary Delete Cashout Method
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method to delete
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(productId: string, cashoutMethodId: string, bpuid: string, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(productId, cashoutMethodId, bpuid, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Retrieve the details for a specific Cashout event
+ * @summary Get Cashout Detail
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutId The cashout event ID
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public getCashoutDetailProductIdCashoutCashoutIdGet(productId: string, cashoutId: string, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).getCashoutDetailProductIdCashoutCashoutIdGet(productId, cashoutId, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Retrieve the current available mechanisms that a user can use to retrieve funds.
+ * @summary Get Cashout Methods
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public getCashoutMethodsProductIdCashoutMethodsGet(productId: string, bpuid: string, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).getCashoutMethodsProductIdCashoutMethodsGet(productId, bpuid, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Use this function to get the \"value\" (in local currency, e.g. CAD, BTC) for this cashout_method, for amount (in USD cents).
+ * @summary Get Expected Redemption Value
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} cashoutMethodId The ID of the cashout method
+ * @param {number} amount (USD cents) The amount to convert
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(productId: string, cashoutMethodId: string, amount: number, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(productId, cashoutMethodId, amount, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Return array of user events that altered their wallet balance
+ * @summary Get User Transaction History
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {string} [createdAfter] Filter transactions created after this timestamp
+ * @param {string} [createdBefore] Filter transactions created before this timestamp
+ * @param {string} [orderBy] Comma-separated fields to order by
+ * @param {number} [page]
+ * @param {number} [size]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public getUserTransactionHistoryProductIdTransactionHistoryGet(productId: string, bpuid: string, createdAfter?: string, createdBefore?: string, orderBy?: string, page?: number, size?: number, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).getUserTransactionHistoryProductIdTransactionHistoryGet(productId, bpuid, createdAfter, createdBefore, orderBy, page, size, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Retrieve the current balance of a respondent\'s wallet balance for display
+ * @summary Get User Wallet Balance
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {string} bpuid A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public getUserWalletBalanceProductIdWalletGet(productId: string, bpuid: string, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).getUserWalletBalanceProductIdWalletGet(productId, bpuid, options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Request a cashout taken from a user\'s available wallet balance, to be paid via a particular cashout method.
+ * @summary Submit User Cashout
+ * @param {string} productId The Brokerage Product ID provided by GRL.
+ * @param {CreateCashoutRequest} createCashoutRequest
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof WalletApi
+ */
+ public submitUserCashoutProductIdCashoutPost(productId: string, createCashoutRequest: CreateCashoutRequest, options?: RawAxiosRequestConfig) {
+ return WalletApiFp(this.configuration).submitUserCashoutProductIdCashoutPost(productId, createCashoutRequest, options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
diff --git a/jb-ui/src/api_fsb/base.ts b/jb-ui/src/api_fsb/base.ts
new file mode 100644
index 0000000..a160b5d
--- /dev/null
+++ b/jb-ui/src/api_fsb/base.ts
@@ -0,0 +1,86 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * General Research Full Service Brokerage API
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.2.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+import type { Configuration } from './configuration';
+// Some imports not used depending on template conditions
+// @ts-ignore
+import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
+import globalAxios from 'axios';
+
+export const BASE_PATH = "https://fsb.generalresearch.com".replace(/\/+$/, "");
+
+/**
+ *
+ * @export
+ */
+export const COLLECTION_FORMATS = {
+ csv: ",",
+ ssv: " ",
+ tsv: "\t",
+ pipes: "|",
+};
+
+/**
+ *
+ * @export
+ * @interface RequestArgs
+ */
+export interface RequestArgs {
+ url: string;
+ options: RawAxiosRequestConfig;
+}
+
+/**
+ *
+ * @export
+ * @class BaseAPI
+ */
+export class BaseAPI {
+ protected configuration: Configuration | undefined;
+
+ constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {
+ if (configuration) {
+ this.configuration = configuration;
+ this.basePath = configuration.basePath ?? basePath;
+ }
+ }
+};
+
+/**
+ *
+ * @export
+ * @class RequiredError
+ * @extends {Error}
+ */
+export class RequiredError extends Error {
+ constructor(public field: string, msg?: string) {
+ super(msg);
+ this.name = "RequiredError"
+ }
+}
+
+interface ServerMap {
+ [key: string]: {
+ url: string,
+ description: string,
+ }[];
+}
+
+/**
+ *
+ * @export
+ */
+export const operationServerMap: ServerMap = {
+}
diff --git a/jb-ui/src/api_fsb/common.ts b/jb-ui/src/api_fsb/common.ts
new file mode 100644
index 0000000..5db2d6a
--- /dev/null
+++ b/jb-ui/src/api_fsb/common.ts
@@ -0,0 +1,150 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * General Research Full Service Brokerage API
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.2.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+import type { Configuration } from "./configuration";
+import type { RequestArgs } from "./base";
+import type { AxiosInstance, AxiosResponse } from 'axios';
+import { RequiredError } from "./base";
+
+/**
+ *
+ * @export
+ */
+export const DUMMY_BASE_URL = 'https://example.com'
+
+/**
+ *
+ * @throws {RequiredError}
+ * @export
+ */
+export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) {
+ if (paramValue === null || paramValue === undefined) {
+ throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);
+ }
+}
+
+/**
+ *
+ * @export
+ */
+export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) {
+ if (configuration && configuration.apiKey) {
+ const localVarApiKeyValue = typeof configuration.apiKey === 'function'
+ ? await configuration.apiKey(keyParamName)
+ : await configuration.apiKey;
+ object[keyParamName] = localVarApiKeyValue;
+ }
+}
+
+/**
+ *
+ * @export
+ */
+export const setBasicAuthToObject = function (object: any, configuration?: Configuration) {
+ if (configuration && (configuration.username || configuration.password)) {
+ object["auth"] = { username: configuration.username, password: configuration.password };
+ }
+}
+
+/**
+ *
+ * @export
+ */
+export const setBearerAuthToObject = async function (object: any, configuration?: Configuration) {
+ if (configuration && configuration.accessToken) {
+ const accessToken = typeof configuration.accessToken === 'function'
+ ? await configuration.accessToken()
+ : await configuration.accessToken;
+ object["Authorization"] = "Bearer " + accessToken;
+ }
+}
+
+/**
+ *
+ * @export
+ */
+export const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) {
+ if (configuration && configuration.accessToken) {
+ const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
+ ? await configuration.accessToken(name, scopes)
+ : await configuration.accessToken;
+ object["Authorization"] = "Bearer " + localVarAccessTokenValue;
+ }
+}
+
+function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void {
+ if (parameter == null) return;
+ if (typeof parameter === "object") {
+ if (Array.isArray(parameter)) {
+ (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key));
+ }
+ else {
+ Object.keys(parameter).forEach(currentKey =>
+ setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`)
+ );
+ }
+ }
+ else {
+ if (urlSearchParams.has(key)) {
+ urlSearchParams.append(key, parameter);
+ }
+ else {
+ urlSearchParams.set(key, parameter);
+ }
+ }
+}
+
+/**
+ *
+ * @export
+ */
+export const setSearchParams = function (url: URL, ...objects: any[]) {
+ const searchParams = new URLSearchParams(url.search);
+ setFlattenedQueryParams(searchParams, objects);
+ url.search = searchParams.toString();
+}
+
+/**
+ *
+ * @export
+ */
+export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) {
+ const nonString = typeof value !== 'string';
+ const needsSerialization = nonString && configuration && configuration.isJsonMime
+ ? configuration.isJsonMime(requestOptions.headers['Content-Type'])
+ : nonString;
+ return needsSerialization
+ ? JSON.stringify(value !== undefined ? value : {})
+ : (value || "");
+}
+
+/**
+ *
+ * @export
+ */
+export const toPathString = function (url: URL) {
+ return url.pathname + url.search + url.hash
+}
+
+/**
+ *
+ * @export
+ */
+export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {
+ return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+ const axiosRequestArgs = {...axiosArgs.options, url: (axios.defaults.baseURL ? '' : configuration?.basePath ?? basePath) + axiosArgs.url};
+ return axios.request<T, R>(axiosRequestArgs);
+ };
+}
diff --git a/jb-ui/src/api_fsb/configuration.ts b/jb-ui/src/api_fsb/configuration.ts
new file mode 100644
index 0000000..f836cb7
--- /dev/null
+++ b/jb-ui/src/api_fsb/configuration.ts
@@ -0,0 +1,115 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * General Research Full Service Brokerage API
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.2.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+export interface ConfigurationParameters {
+ apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
+ username?: string;
+ password?: string;
+ accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);
+ basePath?: string;
+ serverIndex?: number;
+ baseOptions?: any;
+ formDataCtor?: new () => any;
+}
+
+export class Configuration {
+ /**
+ * parameter for apiKey security
+ * @param name security name
+ * @memberof Configuration
+ */
+ apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
+ /**
+ * parameter for basic security
+ *
+ * @type {string}
+ * @memberof Configuration
+ */
+ username?: string;
+ /**
+ * parameter for basic security
+ *
+ * @type {string}
+ * @memberof Configuration
+ */
+ password?: string;
+ /**
+ * parameter for oauth2 security
+ * @param name security name
+ * @param scopes oauth2 scope
+ * @memberof Configuration
+ */
+ accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);
+ /**
+ * override base path
+ *
+ * @type {string}
+ * @memberof Configuration
+ */
+ basePath?: string;
+ /**
+ * override server index
+ *
+ * @type {number}
+ * @memberof Configuration
+ */
+ serverIndex?: number;
+ /**
+ * base options for axios calls
+ *
+ * @type {any}
+ * @memberof Configuration
+ */
+ baseOptions?: any;
+ /**
+ * The FormData constructor that will be used to create multipart form data
+ * requests. You can inject this here so that execution environments that
+ * do not support the FormData class can still run the generated client.
+ *
+ * @type {new () => FormData}
+ */
+ formDataCtor?: new () => any;
+
+ constructor(param: ConfigurationParameters = {}) {
+ this.apiKey = param.apiKey;
+ this.username = param.username;
+ this.password = param.password;
+ this.accessToken = param.accessToken;
+ this.basePath = param.basePath;
+ this.serverIndex = param.serverIndex;
+ this.baseOptions = {
+ ...param.baseOptions,
+ headers: {
+ ...param.baseOptions?.headers,
+ },
+ };
+ this.formDataCtor = param.formDataCtor;
+ }
+
+ /**
+ * Check if the given MIME is a JSON MIME.
+ * JSON MIME examples:
+ * application/json
+ * application/json; charset=UTF8
+ * APPLICATION/JSON
+ * application/vnd.company+json
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
+ * @return True if the given MIME is JSON, false otherwise.
+ */
+ public isJsonMime(mime: string): boolean {
+ const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
+ }
+}
diff --git a/jb-ui/src/api_fsb/docs/AccountType.md b/jb-ui/src/api_fsb/docs/AccountType.md
new file mode 100644
index 0000000..6d2e246
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AccountType.md
@@ -0,0 +1,30 @@
+# AccountType
+
+
+## Enum
+
+* `BpCommission` (value: `'bp_commission'`)
+
+* `BpWallet` (value: `'bp_wallet'`)
+
+* `UserWallet` (value: `'user_wallet'`)
+
+* `Cash` (value: `'cash'`)
+
+* `Revenue` (value: `'revenue'`)
+
+* `Expense` (value: `'expense'`)
+
+* `ContestWallet` (value: `'contest_wallet'`)
+
+* `CreditLine` (value: `'credit_line'`)
+
+* `WaWallet` (value: `'wa_wallet'`)
+
+* `WaBudgetPool` (value: `'wa_budget_pool'`)
+
+* `WaHeld` (value: `'wa_held'`)
+
+* `WaCreditLine` (value: `'wa_credit_line'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AdjustedAfter.md b/jb-ui/src/api_fsb/docs/AdjustedAfter.md
new file mode 100644
index 0000000..e506770
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AdjustedAfter.md
@@ -0,0 +1,19 @@
+# AdjustedAfter
+
+Retrieve sessions which were adjusted after this timestamp.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { AdjustedAfter } from './api';
+
+const instance: AdjustedAfter = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AdjustedBefore.md b/jb-ui/src/api_fsb/docs/AdjustedBefore.md
new file mode 100644
index 0000000..b54b9f0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AdjustedBefore.md
@@ -0,0 +1,19 @@
+# AdjustedBefore
+
+Retrieve sessions which were adjusted before this timestamp. Default is now.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { AdjustedBefore } from './api';
+
+const instance: AdjustedBefore = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AdjustedTimestamp.md b/jb-ui/src/api_fsb/docs/AdjustedTimestamp.md
new file mode 100644
index 0000000..6a843d1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AdjustedTimestamp.md
@@ -0,0 +1,18 @@
+# AdjustedTimestamp
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { AdjustedTimestamp } from './api';
+
+const instance: AdjustedTimestamp = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AdjustmentType.md b/jb-ui/src/api_fsb/docs/AdjustmentType.md
new file mode 100644
index 0000000..bb7aad0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AdjustmentType.md
@@ -0,0 +1,22 @@
+# AdjustmentType
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**amount** | **number** | The total amount (in USD cents) that the Brokerage Producthas earned within a respective time period from a specificSource of Tasks. | [default to undefined]
+**adjustment** | [**SessionAdjustedStatus**](SessionAdjustedStatus.md) | - &#x60;ac&#x60; &#x3D; ADJUSTED_TO_COMPLETE - &#x60;af&#x60; &#x3D; ADJUSTED_TO_FAIL - &#x60;pa&#x60; &#x3D; PAYOUT_ADJUSTMENT | [default to undefined]
+
+## Example
+
+```typescript
+import { AdjustmentType } from './api';
+
+const instance: AdjustmentType = {
+ amount,
+ adjustment,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AggregateBySource.md b/jb-ui/src/api_fsb/docs/AggregateBySource.md
new file mode 100644
index 0000000..af8ea60
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AggregateBySource.md
@@ -0,0 +1,22 @@
+# AggregateBySource
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**total** | **number** | | [optional] [default to 0]
+**by_source** | **{ [key: string]: number; }** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { AggregateBySource } from './api';
+
+const instance: AggregateBySource = {
+ total,
+ by_source,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AmtCashoutMethodData.md b/jb-ui/src/api_fsb/docs/AmtCashoutMethodData.md
new file mode 100644
index 0000000..c9161cc
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AmtCashoutMethodData.md
@@ -0,0 +1,20 @@
+# AmtCashoutMethodData
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_Amt]
+
+## Example
+
+```typescript
+import { AmtCashoutMethodData } from './api';
+
+const instance: AmtCashoutMethodData = {
+ type,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AuditLog.md b/jb-ui/src/api_fsb/docs/AuditLog.md
new file mode 100644
index 0000000..3d47457
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AuditLog.md
@@ -0,0 +1,33 @@
+# AuditLog
+
+Table / Model for logging \"actions\" taken by a user or \"events\" that are related to a User
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **number** | | [optional] [default to undefined]
+**user_id** | **number** | | [default to undefined]
+**created** | **string** | When did this event occur | [optional] [default to undefined]
+**level** | [**AuditLogLevel**](AuditLogLevel.md) | The level of importance for this event. Works the same as python logging levels. It is an integer 0 - 50, and implementers of this field could map it to the predefined levels: (&#x60;CRITICAL&#x60;, &#x60;ERROR&#x60;, &#x60;WARNING&#x60;, &#x60;INFO&#x60;, &#x60;DEBUG&#x60;).This is NOT the same concept as the \&#39;strength\&#39; of whatever event happened; it is just for sorting, filtering and display purposes. For e.g. multiple level 20 events !&#x3D; the \&#39;importance\&#39; of one level 40 event. | [default to undefined]
+**event_type** | **string** | | [default to undefined]
+**event_msg** | **string** | | [optional] [default to undefined]
+**event_value** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { AuditLog } from './api';
+
+const instance: AuditLog = {
+ id,
+ user_id,
+ created,
+ level,
+ event_type,
+ event_msg,
+ event_value,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/AuditLogLevel.md b/jb-ui/src/api_fsb/docs/AuditLogLevel.md
new file mode 100644
index 0000000..6a61270
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/AuditLogLevel.md
@@ -0,0 +1,22 @@
+# AuditLogLevel
+
+
+## Enum
+
+* `NUMBER_50` (value: `50`)
+
+* `NUMBER_502` (value: `50`)
+
+* `NUMBER_40` (value: `40`)
+
+* `NUMBER_30` (value: `30`)
+
+* `NUMBER_302` (value: `30`)
+
+* `NUMBER_20` (value: `20`)
+
+* `NUMBER_10` (value: `10`)
+
+* `NUMBER_0` (value: `0`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Body.md b/jb-ui/src/api_fsb/docs/Body.md
new file mode 100644
index 0000000..34407b7
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Body.md
@@ -0,0 +1,26 @@
+# Body
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bpuid** | **string** | (product_user_id) The user to create this cashout method for. | [default to undefined]
+**type** | **string** | | [optional] [default to TypeEnum_Paypal]
+**email** | **string** | Email address of the paypal user | [default to undefined]
+**delivery_address** | [**USDeliveryAddress**](USDeliveryAddress.md) | Delivery address where payment should be sent | [default to undefined]
+
+## Example
+
+```typescript
+import { Body } from './api';
+
+const instance: Body = {
+ bpuid,
+ type,
+ email,
+ delivery_address,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost.md b/jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost.md
new file mode 100644
index 0000000..c409376
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost.md
@@ -0,0 +1,20 @@
+# BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**answers** | [**Array&lt;UserQuestionAnswerIn&gt;**](UserQuestionAnswerIn.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost } from './api';
+
+const instance: BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost = {
+ answers,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost.md b/jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost.md
new file mode 100644
index 0000000..6947ba6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost.md
@@ -0,0 +1,20 @@
+# BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**answers** | [**Array&lt;UserQuestionAnswerIn&gt;**](UserQuestionAnswerIn.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost } from './api';
+
+const instance: BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost = {
+ answers,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost.md b/jb-ui/src/api_fsb/docs/BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost.md
new file mode 100644
index 0000000..90dd292
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost.md
@@ -0,0 +1,20 @@
+# BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**answers** | [**Array&lt;UserQuestionAnswerIn&gt;**](UserQuestionAnswerIn.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost } from './api';
+
+const instance: BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost = {
+ answers,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/BrokerageProductPayoutEvent.md b/jb-ui/src/api_fsb/docs/BrokerageProductPayoutEvent.md
new file mode 100644
index 0000000..c2d2ca6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/BrokerageProductPayoutEvent.md
@@ -0,0 +1,47 @@
+# BrokerageProductPayoutEvent
+
+The amount - created: When the Brokerage Product was paid out
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **string** | | [optional] [default to undefined]
+**debit_account_uuid** | **string** | The LedgerAccount.uuid that money is being requested from. Thie User or Brokerage Product is retrievable through the LedgerAccount.reference_uuid | [default to undefined]
+**cashout_method_uuid** | **string** | References a row in the account_cashoutmethod table. This is the cashout method that was used to request this payout. (A cashout is the same thing as a payout) | [default to undefined]
+**created** | **string** | | [optional] [default to undefined]
+**amount** | **number** | The USDCent amount int. This cannot be 0 or negative | [default to undefined]
+**status** | [**PayoutStatus**](PayoutStatus.md) | | [optional] [default to undefined]
+**ext_ref_id** | **string** | | [optional] [default to undefined]
+**payout_type** | [**PayoutType**](PayoutType.md) | - &#x60;PAYPAL&#x60; &#x3D; PAYPAL - &#x60;TANGO&#x60; &#x3D; TANGO - &#x60;DWOLLA&#x60; &#x3D; DWOLLA - &#x60;ACH&#x60; &#x3D; ACH - &#x60;WIRE&#x60; &#x3D; WIRE - &#x60;CASH_IN_MAIL&#x60; &#x3D; CASH_IN_MAIL - &#x60;PRIZE&#x60; &#x3D; PRIZE - &#x60;AMT&#x60; &#x3D; AMT - &#x60;AMT_BONUS&#x60; &#x3D; AMT_BONUS - &#x60;AMT_ASSIGNMENT&#x60; &#x3D; AMT_HIT | [default to undefined]
+**request_data** | **object** | Stores payout-type-specific information that is used to request this payout from the external provider. | [optional] [default to undefined]
+**order_data** | [**OrderData**](OrderData.md) | | [optional] [default to undefined]
+**product_id** | **string** | The Brokerage Product that was paid out | [default to undefined]
+**method** | [**PayoutType**](PayoutType.md) | - &#x60;PAYPAL&#x60; &#x3D; PAYPAL - &#x60;TANGO&#x60; &#x3D; TANGO - &#x60;DWOLLA&#x60; &#x3D; DWOLLA - &#x60;ACH&#x60; &#x3D; ACH - &#x60;WIRE&#x60; &#x3D; WIRE - &#x60;CASH_IN_MAIL&#x60; &#x3D; CASH_IN_MAIL - &#x60;PRIZE&#x60; &#x3D; PRIZE - &#x60;AMT&#x60; &#x3D; AMT - &#x60;AMT_BONUS&#x60; &#x3D; AMT_BONUS - &#x60;AMT_ASSIGNMENT&#x60; &#x3D; AMT_HIT | [readonly] [default to undefined]
+**amount_usd** | **number** | | [readonly] [default to undefined]
+**amount_usd_str** | **string** | | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { BrokerageProductPayoutEvent } from './api';
+
+const instance: BrokerageProductPayoutEvent = {
+ uuid,
+ debit_account_uuid,
+ cashout_method_uuid,
+ created,
+ amount,
+ status,
+ ext_ref_id,
+ payout_type,
+ request_data,
+ order_data,
+ product_id,
+ method,
+ amount_usd,
+ amount_usd_str,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/BucketTask.md b/jb-ui/src/api_fsb/docs/BucketTask.md
new file mode 100644
index 0000000..0990789
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/BucketTask.md
@@ -0,0 +1,29 @@
+# BucketTask
+
+This represents one of the \"tasks\" within a bucket\'s ordered list of tasks.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | The internal task id for this task within the marketplace | [default to undefined]
+**id_code** | **string** | The namespaced task id for this task within the marketplace | [default to undefined]
+**source** | [**Source**](Source.md) | | [default to undefined]
+**loi** | **number** | expected loi in seconds | [default to undefined]
+**payout** | **number** | integer cents | [default to undefined]
+
+## Example
+
+```typescript
+import { BucketTask } from './api';
+
+const instance: BucketTask = {
+ id,
+ id_code,
+ source,
+ loi,
+ payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/BuyerId.md b/jb-ui/src/api_fsb/docs/BuyerId.md
new file mode 100644
index 0000000..ac5ff74
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/BuyerId.md
@@ -0,0 +1,18 @@
+# BuyerId
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { BuyerId } from './api';
+
+const instance: BuyerId = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Cardinality.md b/jb-ui/src/api_fsb/docs/Cardinality.md
new file mode 100644
index 0000000..e9e940b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Cardinality.md
@@ -0,0 +1,10 @@
+# Cardinality
+
+
+## Enum
+
+* `Star` (value: `'*'`)
+
+* `QuestionMark` (value: `'?'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashMailCashoutMethodData.md b/jb-ui/src/api_fsb/docs/CashMailCashoutMethodData.md
new file mode 100644
index 0000000..2951a64
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashMailCashoutMethodData.md
@@ -0,0 +1,22 @@
+# CashMailCashoutMethodData
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_CashInMail]
+**delivery_address** | [**USDeliveryAddress**](USDeliveryAddress.md) | Delivery address where payment should be sent | [default to undefined]
+
+## Example
+
+```typescript
+import { CashMailCashoutMethodData } from './api';
+
+const instance: CashMailCashoutMethodData = {
+ type,
+ delivery_address,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashMailOrderData.md b/jb-ui/src/api_fsb/docs/CashMailOrderData.md
new file mode 100644
index 0000000..9679337
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashMailOrderData.md
@@ -0,0 +1,36 @@
+# CashMailOrderData
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_CashInMail]
+**shipping_cost** | **number** | | [default to undefined]
+**tracking_number** | **string** | | [optional] [default to undefined]
+**shipping_method** | [**ShippingMethod**](ShippingMethod.md) | | [optional] [default to undefined]
+**carrier** | [**ShippingCarrier**](ShippingCarrier.md) | | [optional] [default to undefined]
+**ship_date** | **string** | | [optional] [default to undefined]
+**estimated_delivery_date** | **string** | | [optional] [default to undefined]
+**delivery_status** | [**DeliveryStatus**](DeliveryStatus.md) | | [optional] [default to undefined]
+**last_updated** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { CashMailOrderData } from './api';
+
+const instance: CashMailOrderData = {
+ type,
+ shipping_cost,
+ tracking_number,
+ shipping_method,
+ carrier,
+ ship_date,
+ estimated_delivery_date,
+ delivery_status,
+ last_updated,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutMethodForeignValue.md b/jb-ui/src/api_fsb/docs/CashoutMethodForeignValue.md
new file mode 100644
index 0000000..e9e4ae4
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutMethodForeignValue.md
@@ -0,0 +1,25 @@
+# CashoutMethodForeignValue
+
+Shows the expected value of a redemption in a foreign currency.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **number** | Value of the redemption in the currency\&#39;s smallest unit. | [default to undefined]
+**currency** | [**RedemptionCurrency**](RedemptionCurrency.md) | Supported Currencies for Foreign Redemptions Allowed values: - __USD__ *(USD)*: US Dollars. Smallest Unit: Cents. - __CAD__ *(CAD)*: Canadian Dollars. Smallest Unit: Cents. - __GBP__ *(GBP)*: British Pounds. Smallest Unit: Pence. - __EUR__ *(EUR)*: Euros. Smallest Unit: Cents. - __INR__ *(INR)*: Indian Rupees. Smallest Unit: Paise. - __AUD__ *(AUD)*: Australian Dollars. Smallest Unit: Cents. - __PLN__ *(PLN)*: Polish Zloty. Smallest Unit: Grosz. - __SEK__ *(SEK)*: Swedish Krona. Smallest Unit: Öre. - __SGD__ *(SGD)*: Singapore Dollars. Smallest Unit: Cents. - __MXN__ *(MXN)*: Mexican Pesos. Smallest Unit: Centavos. | [default to undefined]
+**value_string** | **string** | A string representation of the value in the currency. | [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutMethodForeignValue } from './api';
+
+const instance: CashoutMethodForeignValue = {
+ value,
+ currency,
+ value_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutMethodForeignValueResponse.md b/jb-ui/src/api_fsb/docs/CashoutMethodForeignValueResponse.md
new file mode 100644
index 0000000..5d7345b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutMethodForeignValueResponse.md
@@ -0,0 +1,24 @@
+# CashoutMethodForeignValueResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**cashout_method_value** | [**CashoutMethodForeignValue**](CashoutMethodForeignValue.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutMethodForeignValueResponse } from './api';
+
+const instance: CashoutMethodForeignValueResponse = {
+ status,
+ msg,
+ cashout_method_value,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutMethodOut.md b/jb-ui/src/api_fsb/docs/CashoutMethodOut.md
new file mode 100644
index 0000000..c4e4832
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutMethodOut.md
@@ -0,0 +1,50 @@
+# CashoutMethodOut
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique ID for this cashout method | [default to undefined]
+**currency** | **string** | The currency of the cashout. Only USD is supported. | [optional] [default to CurrencyEnum_Usd]
+**original_currency** | [**Currency**](Currency.md) | | [optional] [default to undefined]
+**data** | [**Data**](Data.md) | | [default to undefined]
+**description** | **string** | The description of the cashout method. | [optional] [default to '']
+**image_url** | **string** | | [optional] [default to undefined]
+**max_value** | **number** | (In lowest unit of the original_currency), The maximum amount that can be cashed out in one transaction. | [default to undefined]
+**min_value** | **number** | (In lowest unit of the original_currency), The minimum amount that can be cashed out in one transaction. | [default to undefined]
+**name** | **string** | A descriptive name for the cashout method. | [default to undefined]
+**type** | [**PayoutType**](PayoutType.md) | The method in which the requested payout is delivered. Allowed values: - __PAYPAL__ *(PAYPAL)*: User is paid out to their personal PayPal email address - __TANGO__ *(TANGO)*: User is paid uut via a Tango Gift Card - __DWOLLA__ *(DWOLLA)*: DWOLLA - __ACH__ *(ACH)*: A payment is made to a bank account using ACH - __WIRE__ *(WIRE)*: A payment is made to a bank account using ACH - __CASH_IN_MAIL__ *(CASH_IN_MAIL)*: A payment is made in cash and mailed to the user. - __PRIZE__ *(PRIZE)*: A payment is made as a prize with some monetary value - __AMT__ *(AMT)*: This is used to designate either AMT_BONUS or AMT_HIT - __AMT_BONUS__ *(AMT_BONUS)*: Amazon Mechanical Turk as a Bonus - __AMT_ASSIGNMENT__ *(AMT_HIT)*: Amazon Mechanical Turk for a HIT | [default to undefined]
+**ext_id** | **string** | | [optional] [default to undefined]
+**usd_exchange_rate** | **number** | | [optional] [default to undefined]
+**max_value_usd** | **number** | | [optional] [default to undefined]
+**min_value_usd** | **number** | | [optional] [default to undefined]
+**product_id** | **string** | | [optional] [default to undefined]
+**product_user_id** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutMethodOut } from './api';
+
+const instance: CashoutMethodOut = {
+ id,
+ currency,
+ original_currency,
+ data,
+ description,
+ image_url,
+ max_value,
+ min_value,
+ name,
+ type,
+ ext_id,
+ usd_exchange_rate,
+ max_value_usd,
+ min_value_usd,
+ product_id,
+ product_user_id,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutMethodResponse.md b/jb-ui/src/api_fsb/docs/CashoutMethodResponse.md
new file mode 100644
index 0000000..4775d15
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutMethodResponse.md
@@ -0,0 +1,24 @@
+# CashoutMethodResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**cashout_method** | [**CashoutMethodOut**](CashoutMethodOut.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutMethodResponse } from './api';
+
+const instance: CashoutMethodResponse = {
+ status,
+ msg,
+ cashout_method,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutMethodsResponse.md b/jb-ui/src/api_fsb/docs/CashoutMethodsResponse.md
new file mode 100644
index 0000000..b90d887
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutMethodsResponse.md
@@ -0,0 +1,24 @@
+# CashoutMethodsResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**cashout_methods** | [**Array&lt;CashoutMethodOut&gt;**](CashoutMethodOut.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutMethodsResponse } from './api';
+
+const instance: CashoutMethodsResponse = {
+ status,
+ msg,
+ cashout_methods,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutRequestInfo.md b/jb-ui/src/api_fsb/docs/CashoutRequestInfo.md
new file mode 100644
index 0000000..b008871
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutRequestInfo.md
@@ -0,0 +1,29 @@
+# CashoutRequestInfo
+
+See models.thl.payout: PayoutEvent. We\'ve confused a CashOut and a Payout. This is used only in the API response.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | | [default to undefined]
+**description** | **string** | This is the name of the cashout method. | [default to undefined]
+**message** | **string** | | [optional] [default to undefined]
+**status** | [**PayoutStatus**](PayoutStatus.md) | | [optional] [default to undefined]
+**transaction_info** | **object** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutRequestInfo } from './api';
+
+const instance: CashoutRequestInfo = {
+ id,
+ description,
+ message,
+ status,
+ transaction_info,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CashoutRequestResponse.md b/jb-ui/src/api_fsb/docs/CashoutRequestResponse.md
new file mode 100644
index 0000000..a91d277
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CashoutRequestResponse.md
@@ -0,0 +1,24 @@
+# CashoutRequestResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**cashout** | [**CashoutRequestInfo**](CashoutRequestInfo.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { CashoutRequestResponse } from './api';
+
+const instance: CashoutRequestResponse = {
+ status,
+ msg,
+ cashout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Category.md b/jb-ui/src/api_fsb/docs/Category.md
new file mode 100644
index 0000000..c59cf77
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Category.md
@@ -0,0 +1,28 @@
+# Category
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **string** | | [default to undefined]
+**adwords_vertical_id** | **string** | | [optional] [default to undefined]
+**label** | **string** | | [default to undefined]
+**path** | **string** | | [default to undefined]
+**parent_uuid** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { Category } from './api';
+
+const instance: Category = {
+ uuid,
+ adwords_vertical_id,
+ label,
+ path,
+ parent_uuid,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CategoryAssociation.md b/jb-ui/src/api_fsb/docs/CategoryAssociation.md
new file mode 100644
index 0000000..8dea3cb
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CategoryAssociation.md
@@ -0,0 +1,29 @@
+# CategoryAssociation
+
+Used in an offerwall. Stores the association between a category and a bucket, with a score.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | The category ID | [default to undefined]
+**label** | **string** | The category label | [default to undefined]
+**adwords_id** | **string** | | [optional] [default to undefined]
+**adwords_label** | **string** | | [optional] [default to undefined]
+**p** | **number** | The strength of the association of this bucketwith this category. Will sum to 1 within a bucket. | [default to undefined]
+
+## Example
+
+```typescript
+import { CategoryAssociation } from './api';
+
+const instance: CategoryAssociation = {
+ id,
+ label,
+ adwords_id,
+ adwords_label,
+ p,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestApi.md b/jb-ui/src/api_fsb/docs/ContestApi.md
new file mode 100644
index 0000000..57b11f4
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestApi.md
@@ -0,0 +1,234 @@
+# ContestApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**getContestUserViewProductIdContestContestUuidUserProductUserIdGet**](#getcontestuserviewproductidcontestcontestuuiduserproductuseridget) | **GET** /{product_id}/contest/{contest_uuid}/user/{product_user_id}/ | Get Contest User View|
+|[**listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet**](#listcontestsusereligibleproductidcontestuserproductuserideligibleget) | **GET** /{product_id}/contest/user/{product_user_id}/eligible/ | List Contests User Eligible|
+|[**listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet**](#listcontestsuserenteredproductidcontestuserproductuseridenteredget) | **GET** /{product_id}/contest/user/{product_user_id}/entered/ | List Contests User Entered|
+|[**listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet**](#listcontestsuserwinnerproductidcontestuserproductuseridwinnerget) | **GET** /{product_id}/contest/user/{product_user_id}/winner/ | List Contests User Winner|
+
+# **getContestUserViewProductIdContestContestUuidUserProductUserIdGet**
+> ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet getContestUserViewProductIdContestContestUuidUserProductUserIdGet()
+
+Gets a Contest. Includes several keys that are specific to the requesting user: e.g. user_winnings, user_amount.
+
+### Example
+
+```typescript
+import {
+ ContestApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ContestApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let contestUuid: string; // (default to undefined)
+let productUserId: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.getContestUserViewProductIdContestContestUuidUserProductUserIdGet(
+ productId,
+ contestUuid,
+ productUserId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **contestUuid** | [**string**] | | defaults to undefined|
+| **productUserId** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet**
+> Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner> listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet()
+
+Get contests the requesting user is eligible for. Contest eligibility may involve the user\'s country, which is determined by the ip address of THIS request.
+
+### Example
+
+```typescript
+import {
+ ContestApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ContestApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let productUserId: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.listContestsUserEligibleProductIdContestUserProductUserIdEligibleGet(
+ productId,
+ productUserId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **productUserId** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet**
+> Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner> listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet()
+
+Get contests the requesting user has entered. This includes contests such as milestone contests where the user was automatically entered by having a complete for instance.
+
+### Example
+
+```typescript
+import {
+ ContestApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ContestApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let productUserId: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.listContestsUserEnteredProductIdContestUserProductUserIdEnteredGet(
+ productId,
+ productUserId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **productUserId** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet**
+> Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner> listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet()
+
+Get contests the requesting user has won a prize for.
+
+### Example
+
+```typescript
+import {
+ ContestApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ContestApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let productUserId: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.listContestsUserWinnerProductIdContestUserProductUserIdWinnerGet(
+ productId,
+ productUserId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **productUserId** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**Array<ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner>**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/ContestEndCondition.md b/jb-ui/src/api_fsb/docs/ContestEndCondition.md
new file mode 100644
index 0000000..095a519
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestEndCondition.md
@@ -0,0 +1,23 @@
+# ContestEndCondition
+
+Defines the conditions to evaluate to determine when the contest is over. Multiple conditions can be set. The contest is over once ANY conditions are met.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**target_entry_amount** | [**ContestEndConditionTargetEntryAmount**](ContestEndConditionTargetEntryAmount.md) | | [optional] [default to undefined]
+**ends_at** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { ContestEndCondition } from './api';
+
+const instance: ContestEndCondition = {
+ target_entry_amount,
+ ends_at,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestEndConditionTargetEntryAmount.md b/jb-ui/src/api_fsb/docs/ContestEndConditionTargetEntryAmount.md
new file mode 100644
index 0000000..247fd40
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestEndConditionTargetEntryAmount.md
@@ -0,0 +1,18 @@
+# ContestEndConditionTargetEntryAmount
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { ContestEndConditionTargetEntryAmount } from './api';
+
+const instance: ContestEndConditionTargetEntryAmount = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestEndReason.md b/jb-ui/src/api_fsb/docs/ContestEndReason.md
new file mode 100644
index 0000000..c85eba5
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestEndReason.md
@@ -0,0 +1,15 @@
+# ContestEndReason
+
+Defines why a contest ended
+
+## Enum
+
+* `Cancelled` (value: `'cancelled'`)
+
+* `TargetEntryAmount` (value: `'target_entry_amount'`)
+
+* `EndsAt` (value: `'ends_at'`)
+
+* `MaxWinners` (value: `'max_winners'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestEntryRule.md b/jb-ui/src/api_fsb/docs/ContestEntryRule.md
new file mode 100644
index 0000000..c6ec370
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestEntryRule.md
@@ -0,0 +1,29 @@
+# ContestEntryRule
+
+Defines rules the user must meet to be allowed to enter this contest Only applies if the ContestType is ENTRY!
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**max_entry_amount_per_user** | [**MaxEntryAmountPerUser**](MaxEntryAmountPerUser.md) | | [optional] [default to undefined]
+**max_daily_entries_per_user** | **number** | | [optional] [default to undefined]
+**min_completes** | **number** | | [optional] [default to undefined]
+**min_membership_level** | **number** | | [optional] [default to undefined]
+**id_verified** | **boolean** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { ContestEntryRule } from './api';
+
+const instance: ContestEntryRule = {
+ max_entry_amount_per_user,
+ max_daily_entries_per_user,
+ min_completes,
+ min_membership_level,
+ id_verified,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestEntryTrigger.md b/jb-ui/src/api_fsb/docs/ContestEntryTrigger.md
new file mode 100644
index 0000000..f66f142
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestEntryTrigger.md
@@ -0,0 +1,13 @@
+# ContestEntryTrigger
+
+Defines what action/event triggers a (possible) entry into the contest (automatically). This only is valid on milestone contests
+
+## Enum
+
+* `TaskComplete` (value: `'task_complete'`)
+
+* `TaskAttempt` (value: `'task_attempt'`)
+
+* `Referral` (value: `'referral'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestPrize.md b/jb-ui/src/api_fsb/docs/ContestPrize.md
new file mode 100644
index 0000000..03483a6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestPrize.md
@@ -0,0 +1,32 @@
+# ContestPrize
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | [**ContestPrizeKind**](ContestPrizeKind.md) | Allowed values: - __physical__ *(PHYSICAL)*: A physical prize (e.g. a iPhone, cash in the mail, dinner with Max) - __promotion__ *(PROMOTION)*: A promotion is a temporary or special offer that provides extra value or benefits (e.g. 20% bonus on completes for the next 7 days) - __cash__ *(CASH)*: Money is deposited into user\&#39;s virtual wallet | [default to undefined]
+**name** | **string** | | [optional] [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+**estimated_cash_value** | **number** | Estimated cash value of prize in USDCents | [default to undefined]
+**cash_amount** | **number** | | [optional] [default to undefined]
+**promotion_id** | **string** | | [optional] [default to undefined]
+**leaderboard_rank** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { ContestPrize } from './api';
+
+const instance: ContestPrize = {
+ kind,
+ name,
+ description,
+ estimated_cash_value,
+ cash_amount,
+ promotion_id,
+ leaderboard_rank,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestPrizeKind.md b/jb-ui/src/api_fsb/docs/ContestPrizeKind.md
new file mode 100644
index 0000000..2246597
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestPrizeKind.md
@@ -0,0 +1,12 @@
+# ContestPrizeKind
+
+
+## Enum
+
+* `Physical` (value: `'physical'`)
+
+* `Promotion` (value: `'promotion'`)
+
+* `Cash` (value: `'cash'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestStatus.md b/jb-ui/src/api_fsb/docs/ContestStatus.md
new file mode 100644
index 0000000..8d856ee
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestStatus.md
@@ -0,0 +1,12 @@
+# ContestStatus
+
+
+## Enum
+
+* `Active` (value: `'active'`)
+
+* `Completed` (value: `'completed'`)
+
+* `Cancelled` (value: `'cancelled'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ContestWinner.md b/jb-ui/src/api_fsb/docs/ContestWinner.md
new file mode 100644
index 0000000..22a4aa5
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ContestWinner.md
@@ -0,0 +1,29 @@
+# ContestWinner
+
+In a Raffle, the ContestEntryType can be COUNT or CASH. In the CASH type, the unit of entry is 1 USDCent (one penny). Implicitly, each penny entered buys 1 entry into the raffle, and one entry is randomly selected for each prize. A contest should have as many winners as there are prizes special case 1: there are fewer entries than prizes special case 2: leaderboard contest with ties
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **string** | | [optional] [default to undefined]
+**created_at** | **string** | When this user won this prize | [optional] [default to undefined]
+**prize** | [**ContestPrize**](ContestPrize.md) | | [default to undefined]
+**awarded_cash_amount** | **number** | | [optional] [default to undefined]
+**product_user_id** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { ContestWinner } from './api';
+
+const instance: ContestWinner = {
+ uuid,
+ created_at,
+ prize,
+ awarded_cash_amount,
+ product_user_id,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CountStat.md b/jb-ui/src/api_fsb/docs/CountStat.md
new file mode 100644
index 0000000..4baad8f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CountStat.md
@@ -0,0 +1,22 @@
+# CountStat
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**facet** | [**{ [key: string]: FacetValue; }**](FacetValue.md) | The grouping criteria | [default to undefined]
+**count** | **number** | The count value for the given metric and facet | [default to undefined]
+
+## Example
+
+```typescript
+import { CountStat } from './api';
+
+const instance: CountStat = {
+ facet,
+ count,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CreateCashMailCashoutMethodRequest.md b/jb-ui/src/api_fsb/docs/CreateCashMailCashoutMethodRequest.md
new file mode 100644
index 0000000..da377c0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CreateCashMailCashoutMethodRequest.md
@@ -0,0 +1,24 @@
+# CreateCashMailCashoutMethodRequest
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bpuid** | **string** | (product_user_id) The user to create this cashout method for. | [default to undefined]
+**type** | **string** | | [optional] [default to TypeEnum_CashInMail]
+**delivery_address** | [**USDeliveryAddress**](USDeliveryAddress.md) | Delivery address where payment should be sent | [default to undefined]
+
+## Example
+
+```typescript
+import { CreateCashMailCashoutMethodRequest } from './api';
+
+const instance: CreateCashMailCashoutMethodRequest = {
+ bpuid,
+ type,
+ delivery_address,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CreateCashoutRequest.md b/jb-ui/src/api_fsb/docs/CreateCashoutRequest.md
new file mode 100644
index 0000000..9744756
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CreateCashoutRequest.md
@@ -0,0 +1,24 @@
+# CreateCashoutRequest
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bpuid** | **string** | (product_user_id) The user requesting a cashout. | [default to undefined]
+**amount** | **number** | (USD cents) The amount requested for the cashout. | [default to undefined]
+**cashout_method_id** | **string** | Unique ID for the cashout method the cashout is being requested with. | [default to undefined]
+
+## Example
+
+```typescript
+import { CreateCashoutRequest } from './api';
+
+const instance: CreateCashoutRequest = {
+ bpuid,
+ amount,
+ cashout_method_id,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CreatePayPalCashoutMethodRequest.md b/jb-ui/src/api_fsb/docs/CreatePayPalCashoutMethodRequest.md
new file mode 100644
index 0000000..3d63341
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CreatePayPalCashoutMethodRequest.md
@@ -0,0 +1,24 @@
+# CreatePayPalCashoutMethodRequest
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bpuid** | **string** | (product_user_id) The user to create this cashout method for. | [default to undefined]
+**type** | **string** | | [optional] [default to TypeEnum_Paypal]
+**email** | **string** | Email address of the paypal user | [default to undefined]
+
+## Example
+
+```typescript
+import { CreatePayPalCashoutMethodRequest } from './api';
+
+const instance: CreatePayPalCashoutMethodRequest = {
+ bpuid,
+ type,
+ email,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Currency.md b/jb-ui/src/api_fsb/docs/Currency.md
new file mode 100644
index 0000000..a24afe8
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Currency.md
@@ -0,0 +1,26 @@
+# Currency
+
+
+## Enum
+
+* `Usd` (value: `'USD'`)
+
+* `Cad` (value: `'CAD'`)
+
+* `Gbp` (value: `'GBP'`)
+
+* `Eur` (value: `'EUR'`)
+
+* `Inr` (value: `'INR'`)
+
+* `Aud` (value: `'AUD'`)
+
+* `Pln` (value: `'PLN'`)
+
+* `Sek` (value: `'SEK'`)
+
+* `Sgd` (value: `'SGD'`)
+
+* `Mxn` (value: `'MXN'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/CurrentAmount.md b/jb-ui/src/api_fsb/docs/CurrentAmount.md
new file mode 100644
index 0000000..f9bffdb
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/CurrentAmount.md
@@ -0,0 +1,19 @@
+# CurrentAmount
+
+Sum of all entry amounts
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { CurrentAmount } from './api';
+
+const instance: CurrentAmount = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/DashboardApi.md b/jb-ui/src/api_fsb/docs/DashboardApi.md
new file mode 100644
index 0000000..aa109a1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/DashboardApi.md
@@ -0,0 +1,59 @@
+# DashboardApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**marketplaceInventoryDashboardInventoryGet**](#marketplaceinventorydashboardinventoryget) | **GET** /dashboard/inventory/ | Marketplace Inventory|
+
+# **marketplaceInventoryDashboardInventoryGet**
+> MarketplaceSummary marketplaceInventoryDashboardInventoryGet()
+
+
+### Example
+
+```typescript
+import {
+ DashboardApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new DashboardApi(configuration);
+
+let marketplace: 'WXET'; // (default to undefined)
+
+const { status, data } = await apiInstance.marketplaceInventoryDashboardInventoryGet(
+ marketplace
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **marketplace** | [**&#39;WXET&#39;**]**Array<&#39;WXET&#39;>** | | defaults to undefined|
+
+
+### Return type
+
+**MarketplaceSummary**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/Data.md b/jb-ui/src/api_fsb/docs/Data.md
new file mode 100644
index 0000000..60f716f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Data.md
@@ -0,0 +1,34 @@
+# Data
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_Paypal]
+**email** | **string** | Email address of the paypal user | [default to undefined]
+**utid** | **string** | tango utid | [default to undefined]
+**countries** | **Array&lt;string&gt;** | | [default to undefined]
+**value_type** | **string** | | [default to undefined]
+**disclaimer** | **string** | | [optional] [default to '']
+**terms** | **string** | | [optional] [default to '']
+**delivery_address** | [**USDeliveryAddress**](USDeliveryAddress.md) | Delivery address where payment should be sent | [default to undefined]
+
+## Example
+
+```typescript
+import { Data } from './api';
+
+const instance: Data = {
+ type,
+ email,
+ utid,
+ countries,
+ value_type,
+ disclaimer,
+ terms,
+ delivery_address,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/DefaultApi.md b/jb-ui/src/api_fsb/docs/DefaultApi.md
new file mode 100644
index 0000000..5d70a4b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/DefaultApi.md
@@ -0,0 +1,139 @@
+# DefaultApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**returnNothingFaviconIcoGet**](#returnnothingfaviconicoget) | **GET** /favicon.ico | Return Nothing|
+|[**returnNothingRobotsTxtGet**](#returnnothingrobotstxtget) | **GET** /robots.txt | Return Nothing|
+|[**returnNothingSitemapXmlGet**](#returnnothingsitemapxmlget) | **GET** /sitemap.xml | Return Nothing|
+
+# **returnNothingFaviconIcoGet**
+> any returnNothingFaviconIcoGet()
+
+
+### Example
+
+```typescript
+import {
+ DefaultApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new DefaultApi(configuration);
+
+const { status, data } = await apiInstance.returnNothingFaviconIcoGet();
+```
+
+### Parameters
+This endpoint does not have any parameters.
+
+
+### Return type
+
+**any**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **returnNothingRobotsTxtGet**
+> any returnNothingRobotsTxtGet()
+
+
+### Example
+
+```typescript
+import {
+ DefaultApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new DefaultApi(configuration);
+
+const { status, data } = await apiInstance.returnNothingRobotsTxtGet();
+```
+
+### Parameters
+This endpoint does not have any parameters.
+
+
+### Return type
+
+**any**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **returnNothingSitemapXmlGet**
+> any returnNothingSitemapXmlGet()
+
+
+### Example
+
+```typescript
+import {
+ DefaultApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new DefaultApi(configuration);
+
+const { status, data } = await apiInstance.returnNothingSitemapXmlGet();
+```
+
+### Parameters
+This endpoint does not have any parameters.
+
+
+### Return type
+
+**any**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/DeliveryStatus.md b/jb-ui/src/api_fsb/docs/DeliveryStatus.md
new file mode 100644
index 0000000..8d79d1c
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/DeliveryStatus.md
@@ -0,0 +1,24 @@
+# DeliveryStatus
+
+
+## Enum
+
+* `Pending` (value: `'Pending'`)
+
+* `Shipped` (value: `'Shipped'`)
+
+* `InTransit` (value: `'In Transit'`)
+
+* `OutForDelivery` (value: `'Out for Delivery'`)
+
+* `Delivered` (value: `'Delivered'`)
+
+* `Returned` (value: `'Returned'`)
+
+* `Canceled` (value: `'Canceled'`)
+
+* `FailedAttempt` (value: `'Failed Attempt'`)
+
+* `Lost` (value: `'Lost'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Direction.md b/jb-ui/src/api_fsb/docs/Direction.md
new file mode 100644
index 0000000..70e2183
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Direction.md
@@ -0,0 +1,11 @@
+# Direction
+
+Entries on the debit side will increase debit normal accounts, while entries on the credit side will decrease them. Conversely, entries on the credit side will increase credit normal accounts, while entries on the debit side will decrease them. By convention (?), the db will store transactions as debit-normal. For a credit-normal account, we should flip the signs.
+
+## Enum
+
+* `NUMBER_MINUS_1` (value: `-1`)
+
+* `NUMBER_1` (value: `1`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/DurationSummary.md b/jb-ui/src/api_fsb/docs/DurationSummary.md
new file mode 100644
index 0000000..d865013
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/DurationSummary.md
@@ -0,0 +1,35 @@
+# DurationSummary
+
+Durations are in integer seconds. Describes the statistical distribution of expected durations of tasks within this bucket.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**min** | **number** | | [default to undefined]
+**max** | **number** | | [default to undefined]
+**mean** | **number** | | [optional] [default to undefined]
+**q1** | **number** | | [default to undefined]
+**q2** | **number** | | [default to undefined]
+**q3** | **number** | | [default to undefined]
+**lower_whisker** | **number** | | [readonly] [default to undefined]
+**upper_whisker** | **number** | | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { DurationSummary } from './api';
+
+const instance: DurationSummary = {
+ min,
+ max,
+ mean,
+ q1,
+ q2,
+ q3,
+ lower_whisker,
+ upper_whisker,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/EventEnvelope.md b/jb-ui/src/api_fsb/docs/EventEnvelope.md
new file mode 100644
index 0000000..8da827d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/EventEnvelope.md
@@ -0,0 +1,32 @@
+# EventEnvelope
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**event_uuid** | **string** | | [optional] [default to undefined]
+**event_type** | [**EventType**](EventType.md) | | [default to undefined]
+**timestamp** | **string** | | [optional] [default to undefined]
+**version** | **number** | | [optional] [default to 1]
+**product_user_id** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | | [default to undefined]
+**payload** | [**Payload**](Payload.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { EventEnvelope } from './api';
+
+const instance: EventEnvelope = {
+ event_uuid,
+ event_type,
+ timestamp,
+ version,
+ product_user_id,
+ product_id,
+ payload,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/EventMessage.md b/jb-ui/src/api_fsb/docs/EventMessage.md
new file mode 100644
index 0000000..4895dee
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/EventMessage.md
@@ -0,0 +1,24 @@
+# EventMessage
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | **string** | | [optional] [default to KindEnum_Event]
+**timestamp** | **string** | | [optional] [default to undefined]
+**data** | [**EventEnvelope**](EventEnvelope.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { EventMessage } from './api';
+
+const instance: EventMessage = {
+ kind,
+ timestamp,
+ data,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/EventType.md b/jb-ui/src/api_fsb/docs/EventType.md
new file mode 100644
index 0000000..37dc081
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/EventType.md
@@ -0,0 +1,22 @@
+# EventType
+
+
+## Enum
+
+* `TaskEnter` (value: `'task.enter'`)
+
+* `TaskFinish` (value: `'task.finish'`)
+
+* `SessionEnter` (value: `'session.enter'`)
+
+* `SessionFinish` (value: `'session.finish'`)
+
+* `WalletCredit` (value: `'wallet.credit'`)
+
+* `WalletDebit` (value: `'wallet.debit'`)
+
+* `UserCreated` (value: `'user.created'`)
+
+* `UserActive` (value: `'user.active'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ExtStatusCode1.md b/jb-ui/src/api_fsb/docs/ExtStatusCode1.md
new file mode 100644
index 0000000..6cb32d9
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ExtStatusCode1.md
@@ -0,0 +1,18 @@
+# ExtStatusCode1
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { ExtStatusCode1 } from './api';
+
+const instance: ExtStatusCode1 = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ExtStatusCode2.md b/jb-ui/src/api_fsb/docs/ExtStatusCode2.md
new file mode 100644
index 0000000..b8531d1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ExtStatusCode2.md
@@ -0,0 +1,18 @@
+# ExtStatusCode2
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { ExtStatusCode2 } from './api';
+
+const instance: ExtStatusCode2 = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ExtStatusCode3.md b/jb-ui/src/api_fsb/docs/ExtStatusCode3.md
new file mode 100644
index 0000000..e2e31ef
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ExtStatusCode3.md
@@ -0,0 +1,18 @@
+# ExtStatusCode3
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { ExtStatusCode3 } from './api';
+
+const instance: ExtStatusCode3 = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/FacetValue.md b/jb-ui/src/api_fsb/docs/FacetValue.md
new file mode 100644
index 0000000..f06f26c
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/FacetValue.md
@@ -0,0 +1,18 @@
+# FacetValue
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { FacetValue } from './api';
+
+const instance: FacetValue = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Finished.md b/jb-ui/src/api_fsb/docs/Finished.md
new file mode 100644
index 0000000..e9b7cde
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Finished.md
@@ -0,0 +1,18 @@
+# Finished
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { Finished } from './api';
+
+const instance: Finished = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/GeoIPInformation.md b/jb-ui/src/api_fsb/docs/GeoIPInformation.md
new file mode 100644
index 0000000..5df598e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/GeoIPInformation.md
@@ -0,0 +1,90 @@
+# GeoIPInformation
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**geoname_id** | **number** | | [optional] [default to undefined]
+**continent_code** | **string** | | [optional] [default to undefined]
+**continent_name** | **string** | | [optional] [default to undefined]
+**country_iso** | **string** | The ISO code of the country associated with the IP address. | [default to undefined]
+**country_name** | **string** | | [optional] [default to undefined]
+**subdivision_1_iso** | **string** | | [optional] [default to undefined]
+**subdivision_1_name** | **string** | | [optional] [default to undefined]
+**subdivision_2_iso** | **string** | | [optional] [default to undefined]
+**subdivision_2_name** | **string** | | [optional] [default to undefined]
+**city_name** | **string** | | [optional] [default to undefined]
+**metro_code** | **number** | | [optional] [default to undefined]
+**time_zone** | **string** | | [optional] [default to undefined]
+**is_in_european_union** | **boolean** | | [optional] [default to undefined]
+**updated** | **string** | | [optional] [default to undefined]
+**ip** | **string** | | [default to undefined]
+**registered_country_iso** | **string** | | [optional] [default to undefined]
+**is_anonymous** | **boolean** | | [optional] [default to undefined]
+**is_anonymous_vpn** | **boolean** | | [optional] [default to undefined]
+**is_hosting_provider** | **boolean** | | [optional] [default to undefined]
+**is_public_proxy** | **boolean** | | [optional] [default to undefined]
+**is_tor_exit_node** | **boolean** | | [optional] [default to undefined]
+**is_residential_proxy** | **boolean** | | [optional] [default to undefined]
+**autonomous_system_number** | **number** | | [optional] [default to undefined]
+**autonomous_system_organization** | **string** | | [optional] [default to undefined]
+**domain** | **string** | | [optional] [default to undefined]
+**isp** | **string** | | [optional] [default to undefined]
+**mobile_country_code** | **string** | | [optional] [default to undefined]
+**mobile_network_code** | **string** | | [optional] [default to undefined]
+**network** | **string** | | [optional] [default to undefined]
+**organization** | **string** | | [optional] [default to undefined]
+**static_ip_score** | **number** | | [optional] [default to undefined]
+**user_type** | [**UserType**](UserType.md) | | [optional] [default to undefined]
+**postal_code** | **string** | | [optional] [default to undefined]
+**latitude** | **number** | | [optional] [default to undefined]
+**longitude** | **number** | | [optional] [default to undefined]
+**accuracy_radius** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { GeoIPInformation } from './api';
+
+const instance: GeoIPInformation = {
+ geoname_id,
+ continent_code,
+ continent_name,
+ country_iso,
+ country_name,
+ subdivision_1_iso,
+ subdivision_1_name,
+ subdivision_2_iso,
+ subdivision_2_name,
+ city_name,
+ metro_code,
+ time_zone,
+ is_in_european_union,
+ updated,
+ ip,
+ registered_country_iso,
+ is_anonymous,
+ is_anonymous_vpn,
+ is_hosting_provider,
+ is_public_proxy,
+ is_tor_exit_node,
+ is_residential_proxy,
+ autonomous_system_number,
+ autonomous_system_organization,
+ domain,
+ isp,
+ mobile_country_code,
+ mobile_network_code,
+ network,
+ organization,
+ static_ip_score,
+ user_type,
+ postal_code,
+ latitude,
+ longitude,
+ accuracy_radius,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/HTTPValidationError.md b/jb-ui/src/api_fsb/docs/HTTPValidationError.md
new file mode 100644
index 0000000..7fe160d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/HTTPValidationError.md
@@ -0,0 +1,20 @@
+# HTTPValidationError
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**detail** | [**Array&lt;ValidationError&gt;**](ValidationError.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { HTTPValidationError } from './api';
+
+const instance: HTTPValidationError = {
+ detail,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/IntegrationMode.md b/jb-ui/src/api_fsb/docs/IntegrationMode.md
new file mode 100644
index 0000000..cafd829
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/IntegrationMode.md
@@ -0,0 +1,10 @@
+# IntegrationMode
+
+
+## Enum
+
+* `Platform` (value: `'platform'`)
+
+* `PassThrough` (value: `'pass_through'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Leaderboard.md b/jb-ui/src/api_fsb/docs/Leaderboard.md
new file mode 100644
index 0000000..adae56c
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Leaderboard.md
@@ -0,0 +1,55 @@
+# Leaderboard
+
+A leaderboard exists independently for each product_id in each country. Each country is associated with a single timezone. There is a daily, weekly, and monthly leaderboard.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique ID for this leaderboard | [optional] [default to undefined]
+**name** | **string** | Descriptive name for the leaderboard based on the board_code | [optional] [default to undefined]
+**board_code** | [**LeaderboardCode**](LeaderboardCode.md) | The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts | [default to undefined]
+**bpid** | **string** | product_id | [default to undefined]
+**country_iso** | **string** | The country this leaderboard is for. | [default to undefined]
+**freq** | [**LeaderboardFrequency**](LeaderboardFrequency.md) | The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00 | [default to undefined]
+**timezone_name** | **string** | The timezone for the requested country | [optional] [default to undefined]
+**sort_order** | **string** | | [optional] [default to SortOrderEnum_Descending]
+**row_count** | **number** | The total number of rows in the leaderboard. | [default to undefined]
+**rows** | [**Array&lt;LeaderboardRow&gt;**](LeaderboardRow.md) | | [optional] [default to undefined]
+**period_start_local** | **string** | The start of the time period covered by this board in local time, tz-aware | [default to undefined]
+**period_end_local** | **string** | The end of the time period covered by this board in local time, tz-aware | [optional] [default to undefined]
+**start_timestamp** | **number** | (unix timestamp) The start time of the time range this leaderboard covers. | [readonly] [default to undefined]
+**end_timestamp** | **number** | (unix timestamp) The end time of the time range this leaderboard covers. | [readonly] [default to undefined]
+**utc_offset** | **string** | The UTC offset for the timezone | [readonly] [default to undefined]
+**local_start_time** | **string** | The start time of the time range this leaderboard covers (local time, in the leaderboard\&#39;s timezone). | [readonly] [default to undefined]
+**local_end_time** | **string** | The end time of the time range this leaderboard covers (local time, in the leaderboard\&#39;s timezone). | [readonly] [default to undefined]
+**start_end_str** | **string** | A formatted string for time period covered by this leaderboard. Can be used to display to users. | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { Leaderboard } from './api';
+
+const instance: Leaderboard = {
+ id,
+ name,
+ board_code,
+ bpid,
+ country_iso,
+ freq,
+ timezone_name,
+ sort_order,
+ row_count,
+ rows,
+ period_start_local,
+ period_end_local,
+ start_timestamp,
+ end_timestamp,
+ utc_offset,
+ local_start_time,
+ local_end_time,
+ start_end_str,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardApi.md b/jb-ui/src/api_fsb/docs/LeaderboardApi.md
new file mode 100644
index 0000000..a54a22a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardApi.md
@@ -0,0 +1,139 @@
+# LeaderboardApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet**](#leaderboardwinnersproductidleaderboardtimespanboardcodewinnersget) | **GET** /{product_id}/leaderboard/timespan/{board_code}/winners/ | Leaderboard Winners|
+|[**timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet**](#timespanleaderboardproductidleaderboardtimespanboardcodeget) | **GET** /{product_id}/leaderboard/timespan/{board_code}/ | Timespan Leaderboard|
+
+# **leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet**
+> LeaderboardWinnerResponse leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet()
+
+Get the Winners of leaderboard contests
+
+### Example
+
+```typescript
+import {
+ LeaderboardApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new LeaderboardApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let boardCode: LeaderboardCode; //The type of leaderboard. What the \"values\" represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts (default to undefined)
+let freq: LeaderboardFrequency; //The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00 (default to undefined)
+let countryIso: string; //Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request. (optional) (default to undefined)
+
+const { status, data } = await apiInstance.leaderboardWinnersProductIdLeaderboardTimespanBoardCodeWinnersGet(
+ productId,
+ boardCode,
+ freq,
+ countryIso
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **boardCode** | **LeaderboardCode** | The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts | defaults to undefined|
+| **freq** | **LeaderboardFrequency** | The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00 | defaults to undefined|
+| **countryIso** | [**string**] | Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request. | (optional) defaults to undefined|
+
+
+### Return type
+
+**LeaderboardWinnerResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet**
+> LeaderboardResponse timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet()
+
+
+### Example
+
+```typescript
+import {
+ LeaderboardApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new LeaderboardApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let boardCode: LeaderboardCode; //The type of leaderboard. What the \"values\" represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts (default to undefined)
+let freq: LeaderboardFrequency; //The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00 (default to undefined)
+let countryIso: string; //Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request. (optional) (default to undefined)
+let bpuid: string; //Brokerage Product User ID. If passed, this results in the filtering of rows to include this user\'s row, plus rows above and below in rank (up to `limit` rows). Otherwise, the top `limit` rows are returned. (optional) (default to undefined)
+let withinTime: string; //Any local timestamp falling within the desired leaderboard\'s period. If not passed, uses the country\'s current time period. (optional) (default to undefined)
+let limit: number; //Max number of rows to return (optional) (default to 50)
+
+const { status, data } = await apiInstance.timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(
+ productId,
+ boardCode,
+ freq,
+ countryIso,
+ bpuid,
+ withinTime,
+ limit
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **boardCode** | **LeaderboardCode** | The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts | defaults to undefined|
+| **freq** | **LeaderboardFrequency** | The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00 | defaults to undefined|
+| **countryIso** | [**string**] | Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request. | (optional) defaults to undefined|
+| **bpuid** | [**string**] | Brokerage Product User ID. If passed, this results in the filtering of rows to include this user\&#39;s row, plus rows above and below in rank (up to &#x60;limit&#x60; rows). Otherwise, the top &#x60;limit&#x60; rows are returned. | (optional) defaults to undefined|
+| **withinTime** | [**string**] | Any local timestamp falling within the desired leaderboard\&#39;s period. If not passed, uses the country\&#39;s current time period. | (optional) defaults to undefined|
+| **limit** | [**number**] | Max number of rows to return | (optional) defaults to 50|
+
+
+### Return type
+
+**LeaderboardResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardCode.md b/jb-ui/src/api_fsb/docs/LeaderboardCode.md
new file mode 100644
index 0000000..7f3ba72
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardCode.md
@@ -0,0 +1,13 @@
+# LeaderboardCode
+
+The type of leaderboard. What the \"values\" represent.
+
+## Enum
+
+* `CompleteCount` (value: `'complete_count'`)
+
+* `LargestUserPayout` (value: `'largest_user_payout'`)
+
+* `SumUserPayout` (value: `'sum_user_payout'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardContestUserView.md b/jb-ui/src/api_fsb/docs/LeaderboardContestUserView.md
new file mode 100644
index 0000000..609f69d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardContestUserView.md
@@ -0,0 +1,60 @@
+# LeaderboardContestUserView
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **string** | Name of contest. Can be displayed to user. | [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+**contest_type** | **string** | | [optional] [default to ContestTypeEnum_Leaderboard]
+**end_condition** | [**ContestEndCondition**](ContestEndCondition.md) | | [optional] [default to undefined]
+**prizes** | [**Array&lt;ContestPrize&gt;**](ContestPrize.md) | | [optional] [default to undefined]
+**starts_at** | **string** | When the contest starts | [optional] [default to undefined]
+**terms_and_conditions** | **string** | | [optional] [default to undefined]
+**status** | [**ContestStatus**](ContestStatus.md) | | [optional] [default to undefined]
+**country_isos** | **string** | | [optional] [default to undefined]
+**uuid** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | Contest applies only to a single BP | [default to undefined]
+**created_at** | **string** | When this contest was created | [optional] [default to undefined]
+**updated_at** | **string** | When this contest was last modified. Does not include entries being created/modified | [optional] [default to undefined]
+**ended_at** | **string** | | [optional] [default to undefined]
+**end_reason** | [**ContestEndReason**](ContestEndReason.md) | | [optional] [default to undefined]
+**product_user_id** | **string** | | [default to undefined]
+**user_winnings** | [**Array&lt;ContestWinner&gt;**](ContestWinner.md) | The prizes won in this contest by the requested user | [optional] [default to undefined]
+**leaderboard_key** | **string** | The specific leaderboard instance this contest is connected to | [default to undefined]
+**tie_break_strategy** | **string** | | [optional] [default to TieBreakStrategyEnum_SplitPrizePool]
+**country_iso** | **string** | | [readonly] [default to undefined]
+**user_rank** | **number** | | [default to undefined]
+
+## Example
+
+```typescript
+import { LeaderboardContestUserView } from './api';
+
+const instance: LeaderboardContestUserView = {
+ name,
+ description,
+ contest_type,
+ end_condition,
+ prizes,
+ starts_at,
+ terms_and_conditions,
+ status,
+ country_isos,
+ uuid,
+ product_id,
+ created_at,
+ updated_at,
+ ended_at,
+ end_reason,
+ product_user_id,
+ user_winnings,
+ leaderboard_key,
+ tie_break_strategy,
+ country_iso,
+ user_rank,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardFrequency.md b/jb-ui/src/api_fsb/docs/LeaderboardFrequency.md
new file mode 100644
index 0000000..3e8728c
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardFrequency.md
@@ -0,0 +1,13 @@
+# LeaderboardFrequency
+
+The time period range for the leaderboard.
+
+## Enum
+
+* `Daily` (value: `'daily'`)
+
+* `Weekly` (value: `'weekly'`)
+
+* `Monthly` (value: `'monthly'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardResponse.md b/jb-ui/src/api_fsb/docs/LeaderboardResponse.md
new file mode 100644
index 0000000..11d4559
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardResponse.md
@@ -0,0 +1,24 @@
+# LeaderboardResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**leaderboard** | [**Leaderboard**](Leaderboard.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { LeaderboardResponse } from './api';
+
+const instance: LeaderboardResponse = {
+ status,
+ msg,
+ leaderboard,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardRow.md b/jb-ui/src/api_fsb/docs/LeaderboardRow.md
new file mode 100644
index 0000000..23ad7ab
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardRow.md
@@ -0,0 +1,24 @@
+# LeaderboardRow
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bpuid** | **string** | product_user_id | [default to undefined]
+**rank** | **number** | The numerical data ranks (1 through n) of the values. Ties are ranked using the lowest rank in the group. | [default to undefined]
+**value** | **number** | The value. The meaning of the value is dependent on the LeaderboardCode. | [default to undefined]
+
+## Example
+
+```typescript
+import { LeaderboardRow } from './api';
+
+const instance: LeaderboardRow = {
+ bpuid,
+ rank,
+ value,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardWinner.md b/jb-ui/src/api_fsb/docs/LeaderboardWinner.md
new file mode 100644
index 0000000..1abfaba
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardWinner.md
@@ -0,0 +1,40 @@
+# LeaderboardWinner
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**rank** | **number** | The user\&#39;s final rank in the leaderboard | [default to undefined]
+**freq** | [**LeaderboardFrequency**](LeaderboardFrequency.md) | The time period range for the leaderboard. Allowed values: - __daily__ *(DAILY)*: UTC midnight to UTC midnight - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC - __monthly__ *(MONTHLY)*: Jan 1 00:00:00 | [default to undefined]
+**board_code** | [**LeaderboardCode**](LeaderboardCode.md) | The type of leaderboard. What the \&quot;values\&quot; represent. Allowed values: - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts | [default to undefined]
+**country_iso** | **string** | The country this leaderboard is for. | [default to undefined]
+**issued** | **string** | When the prize was issued. | [default to undefined]
+**bpuid** | **string** | product_user_id | [default to undefined]
+**description** | **string** | | [default to undefined]
+**amount** | **number** | (USD cents) The reward amount | [default to undefined]
+**amount_str** | **string** | The amount as a formatted string in USD. Can be displayed to the user. | [default to undefined]
+**contest_start** | **string** | When the leaderboard started | [default to undefined]
+**contest_end** | **string** | When the leaderboard ended | [default to undefined]
+
+## Example
+
+```typescript
+import { LeaderboardWinner } from './api';
+
+const instance: LeaderboardWinner = {
+ rank,
+ freq,
+ board_code,
+ country_iso,
+ issued,
+ bpuid,
+ description,
+ amount,
+ amount_str,
+ contest_start,
+ contest_end,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LeaderboardWinnerResponse.md b/jb-ui/src/api_fsb/docs/LeaderboardWinnerResponse.md
new file mode 100644
index 0000000..1b89707
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LeaderboardWinnerResponse.md
@@ -0,0 +1,24 @@
+# LeaderboardWinnerResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**winners** | [**Array&lt;LeaderboardWinner&gt;**](LeaderboardWinner.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { LeaderboardWinnerResponse } from './api';
+
+const instance: LeaderboardWinnerResponse = {
+ status,
+ msg,
+ winners,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LedgerAccount.md b/jb-ui/src/api_fsb/docs/LedgerAccount.md
new file mode 100644
index 0000000..f9b1ffa
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LedgerAccount.md
@@ -0,0 +1,34 @@
+# LedgerAccount
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **string** | A unique identifier for this Ledger Account | [optional] [default to undefined]
+**display_name** | **string** | Human-readable description of the Ledger Account | [default to undefined]
+**qualified_name** | **string** | | [default to undefined]
+**account_type** | [**AccountType**](AccountType.md) | - &#x60;bp_commission&#x60; &#x3D; BP_COMMISSION - &#x60;bp_wallet&#x60; &#x3D; BP_WALLET - &#x60;user_wallet&#x60; &#x3D; USER_WALLET - &#x60;cash&#x60; &#x3D; CASH - &#x60;revenue&#x60; &#x3D; REVENUE - &#x60;expense&#x60; &#x3D; EXPENSE - &#x60;contest_wallet&#x60; &#x3D; CONTEST_WALLET - &#x60;credit_line&#x60; &#x3D; CREDIT_LINE - &#x60;wa_wallet&#x60; &#x3D; WA_WALLET - &#x60;wa_budget_pool&#x60; &#x3D; WA_BUDGET_POOL - &#x60;wa_held&#x60; &#x3D; WA_HELD - &#x60;wa_credit_line&#x60; &#x3D; WA_CREDIT_LINE | [default to undefined]
+**normal_balance** | [**Direction**](Direction.md) | - &#x60;-1&#x60; &#x3D; CREDIT - &#x60;1&#x60; &#x3D; DEBIT | [default to undefined]
+**reference_type** | **string** | | [optional] [default to undefined]
+**reference_uuid** | **string** | | [optional] [default to undefined]
+**currency** | **string** | GRL\&#39;s Ledger system allows tracking of transactions inany currency possible. This is useful for trackingpoints, stars, coins, or any other currency that may beused in a Supplier\&#39;s platform. | [optional] [default to 'USD']
+
+## Example
+
+```typescript
+import { LedgerAccount } from './api';
+
+const instance: LedgerAccount = {
+ uuid,
+ display_name,
+ qualified_name,
+ account_type,
+ normal_balance,
+ reference_type,
+ reference_uuid,
+ currency,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LedgerEntry.md b/jb-ui/src/api_fsb/docs/LedgerEntry.md
new file mode 100644
index 0000000..12f44b8
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LedgerEntry.md
@@ -0,0 +1,28 @@
+# LedgerEntry
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **number** | | [optional] [default to undefined]
+**direction** | [**Direction**](Direction.md) | | [default to undefined]
+**account_uuid** | **string** | | [default to undefined]
+**amount** | **number** | The USDCent amount. A LedgerEntry cannot be made for0 USDCent and it cannot be negative. | [default to undefined]
+**transaction_id** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { LedgerEntry } from './api';
+
+const instance: LedgerEntry = {
+ id,
+ direction,
+ account_uuid,
+ amount,
+ transaction_id,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/LedgerTransaction.md b/jb-ui/src/api_fsb/docs/LedgerTransaction.md
new file mode 100644
index 0000000..edf5abc
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/LedgerTransaction.md
@@ -0,0 +1,30 @@
+# LedgerTransaction
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **number** | | [optional] [default to undefined]
+**created** | **string** | When the Transaction (TX) was created into the database.This does not represent the exact time for any actionwhich may be responsible for this Transaction (TX), and TX timestamps will likely be a few milliseconds delayed | [optional] [default to undefined]
+**ext_description** | **string** | | [optional] [default to undefined]
+**tag** | **string** | | [optional] [default to undefined]
+**metadata** | **{ [key: string]: string; }** | | [optional] [default to undefined]
+**entries** | [**Array&lt;LedgerEntry&gt;**](LedgerEntry.md) | A Transaction (TX) is composed of multiple Entry events. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { LedgerTransaction } from './api';
+
+const instance: LedgerTransaction = {
+ id,
+ created,
+ ext_description,
+ tag,
+ metadata,
+ entries,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner.md b/jb-ui/src/api_fsb/docs/ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner.md
new file mode 100644
index 0000000..efb1f80
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner.md
@@ -0,0 +1,86 @@
+# ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **string** | Name of contest. Can be displayed to user. | [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+**contest_type** | **string** | | [optional] [default to ContestTypeEnum_Milestone]
+**end_condition** | [**MilestoneContestEndCondition**](MilestoneContestEndCondition.md) | | [default to undefined]
+**prizes** | [**Array&lt;ContestPrize&gt;**](ContestPrize.md) | | [optional] [default to undefined]
+**starts_at** | **string** | When the contest starts | [optional] [default to undefined]
+**terms_and_conditions** | **string** | | [optional] [default to undefined]
+**status** | [**ContestStatus**](ContestStatus.md) | | [optional] [default to undefined]
+**country_isos** | **string** | | [optional] [default to undefined]
+**uuid** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | Contest applies only to a single BP | [default to undefined]
+**created_at** | **string** | When this contest was created | [optional] [default to undefined]
+**updated_at** | **string** | When this contest was last modified. Does not include entries being created/modified | [optional] [default to undefined]
+**ended_at** | **string** | | [optional] [default to undefined]
+**end_reason** | [**ContestEndReason**](ContestEndReason.md) | | [optional] [default to undefined]
+**product_user_id** | **string** | | [default to undefined]
+**user_winnings** | [**Array&lt;ContestWinner&gt;**](ContestWinner.md) | The prizes won in this contest by the requested user | [optional] [default to undefined]
+**entry_type** | **string** | | [optional] [default to EntryTypeEnum_Count]
+**entry_rule** | [**ContestEntryRule**](ContestEntryRule.md) | | [optional] [default to undefined]
+**current_amount** | [**CurrentAmount**](CurrentAmount.md) | | [optional] [default to undefined]
+**current_participants** | **number** | Count of unique participants | [optional] [default to 0]
+**user_amount** | **number** | The total amount for this user for this contest | [default to undefined]
+**user_amount_today** | [**UserAmountToday**](UserAmountToday.md) | | [default to undefined]
+**current_win_probability** | **number** | Probability of this user winning 1 or more prizes, if the contestended right now | [readonly] [default to undefined]
+**projected_win_probability** | **number** | | [default to undefined]
+**leaderboard_key** | **string** | The specific leaderboard instance this contest is connected to | [default to undefined]
+**tie_break_strategy** | **string** | | [optional] [default to TieBreakStrategyEnum_SplitPrizePool]
+**country_iso** | **string** | | [readonly] [default to undefined]
+**user_rank** | **number** | | [default to undefined]
+**target_amount** | **number** | Each user \&#39;wins\&#39; (receives prizes) once this target amount is reached. | [default to undefined]
+**entry_trigger** | [**ContestEntryTrigger**](ContestEntryTrigger.md) | | [optional] [default to undefined]
+**valid_for** | **string** | | [optional] [default to undefined]
+**valid_for_event** | **string** | | [optional] [default to undefined]
+**win_count** | **number** | The number of times the milestone has been reached. | [optional] [default to 0]
+
+## Example
+
+```typescript
+import { ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner } from './api';
+
+const instance: ListContestsUserEnteredProductIdContestUserProductUserIdEnteredGet200ResponseInner = {
+ name,
+ description,
+ contest_type,
+ end_condition,
+ prizes,
+ starts_at,
+ terms_and_conditions,
+ status,
+ country_isos,
+ uuid,
+ product_id,
+ created_at,
+ updated_at,
+ ended_at,
+ end_reason,
+ product_user_id,
+ user_winnings,
+ entry_type,
+ entry_rule,
+ current_amount,
+ current_participants,
+ user_amount,
+ user_amount_today,
+ current_win_probability,
+ projected_win_probability,
+ leaderboard_key,
+ tie_break_strategy,
+ country_iso,
+ user_rank,
+ target_amount,
+ entry_trigger,
+ valid_for,
+ valid_for_event,
+ win_count,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MarketProfileKnowledge.md b/jb-ui/src/api_fsb/docs/MarketProfileKnowledge.md
new file mode 100644
index 0000000..0e6e36a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MarketProfileKnowledge.md
@@ -0,0 +1,27 @@
+# MarketProfileKnowledge
+
+This is used solely in API responses, so it is simplified.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**source** | [**Source**](Source.md) | Marketplace this question is from | [default to undefined]
+**question_id** | **string** | | [default to undefined]
+**answer** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**created** | **string** | When the User submitted this Profiling data | [default to undefined]
+
+## Example
+
+```typescript
+import { MarketProfileKnowledge } from './api';
+
+const instance: MarketProfileKnowledge = {
+ source,
+ question_id,
+ answer,
+ created,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MarketplaceBucket.md b/jb-ui/src/api_fsb/docs/MarketplaceBucket.md
new file mode 100644
index 0000000..568db7b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MarketplaceBucket.md
@@ -0,0 +1,40 @@
+# MarketplaceBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+**x** | **number** | For UI. Provides a dimensionality position for the bucket on the x-axis. | [optional] [default to 0]
+**y** | **number** | For UI. Provides a dimensionality position for the bucket on the y-axis. | [optional] [default to 0]
+**name** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**description** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**category** | [**Array&lt;CategoryAssociation&gt;**](CategoryAssociation.md) | | [optional] [default to undefined]
+**contents** | [**Array&lt;BucketTask&gt;**](BucketTask.md) | | [default to undefined]
+**duration** | [**DurationSummary**](DurationSummary.md) | | [default to undefined]
+**payout** | [**PayoutSummary**](PayoutSummary.md) | | [default to undefined]
+**source** | **string** | this is the source of the contents | [default to undefined]
+
+## Example
+
+```typescript
+import { MarketplaceBucket } from './api';
+
+const instance: MarketplaceBucket = {
+ id,
+ uri,
+ x,
+ y,
+ name,
+ description,
+ category,
+ contents,
+ duration,
+ payout,
+ source,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MarketplaceInventorySummary.md b/jb-ui/src/api_fsb/docs/MarketplaceInventorySummary.md
new file mode 100644
index 0000000..a5cb21d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MarketplaceInventorySummary.md
@@ -0,0 +1,32 @@
+# MarketplaceInventorySummary
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**live_tasks** | [**Array&lt;CountStat&gt;**](CountStat.md) | The count of tasks that are currently live | [optional] [default to undefined]
+**live_gen_pop_tasks** | [**Array&lt;CountStat&gt;**](CountStat.md) | The count of gen-pop tasks that are currently live | [optional] [default to undefined]
+**tasks_created** | [**Array&lt;CountStat&gt;**](CountStat.md) | The count of tasks created | [optional] [default to undefined]
+**required_finishes** | [**Array&lt;CountStat&gt;**](CountStat.md) | Number of finishes needed across all live tasks | [optional] [default to undefined]
+**payout** | [**Array&lt;StatisticalSummaryStat&gt;**](StatisticalSummaryStat.md) | The distribution of payouts for all live tasks | [optional] [default to undefined]
+**expected_duration** | [**Array&lt;StatisticalSummaryStat&gt;**](StatisticalSummaryStat.md) | The distribution of expected durations for all live tasks | [optional] [default to undefined]
+**required_finishes_per_task** | [**Array&lt;StatisticalSummaryStat&gt;**](StatisticalSummaryStat.md) | The distribution of required finishes on all live tasks | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { MarketplaceInventorySummary } from './api';
+
+const instance: MarketplaceInventorySummary = {
+ live_tasks,
+ live_gen_pop_tasks,
+ tasks_created,
+ required_finishes,
+ payout,
+ expected_duration,
+ required_finishes_per_task,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MarketplaceOfferwall.md b/jb-ui/src/api_fsb/docs/MarketplaceOfferwall.md
new file mode 100644
index 0000000..9216bbf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MarketplaceOfferwall.md
@@ -0,0 +1,29 @@
+# MarketplaceOfferwall
+
+Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality. Offerwall code: `5fa23085`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;MarketplaceBucket&gt;**](MarketplaceBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { MarketplaceOfferwall } from './api';
+
+const instance: MarketplaceOfferwall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MarketplaceOfferwallResponse.md b/jb-ui/src/api_fsb/docs/MarketplaceOfferwallResponse.md
new file mode 100644
index 0000000..897750a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MarketplaceOfferwallResponse.md
@@ -0,0 +1,22 @@
+# MarketplaceOfferwallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**MarketplaceOfferwall**](MarketplaceOfferwall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { MarketplaceOfferwallResponse } from './api';
+
+const instance: MarketplaceOfferwallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MarketplaceSummary.md b/jb-ui/src/api_fsb/docs/MarketplaceSummary.md
new file mode 100644
index 0000000..4a9c430
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MarketplaceSummary.md
@@ -0,0 +1,22 @@
+# MarketplaceSummary
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**inventory** | [**MarketplaceInventorySummary**](MarketplaceInventorySummary.md) | Inventory of the marketplace | [default to undefined]
+**user_activity** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { MarketplaceSummary } from './api';
+
+const instance: MarketplaceSummary = {
+ inventory,
+ user_activity,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MaxEntryAmountPerUser.md b/jb-ui/src/api_fsb/docs/MaxEntryAmountPerUser.md
new file mode 100644
index 0000000..005ef6a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MaxEntryAmountPerUser.md
@@ -0,0 +1,19 @@
+# MaxEntryAmountPerUser
+
+Maximum total value of entries per user
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { MaxEntryAmountPerUser } from './api';
+
+const instance: MaxEntryAmountPerUser = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MaxGaugeBySource.md b/jb-ui/src/api_fsb/docs/MaxGaugeBySource.md
new file mode 100644
index 0000000..53def64
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MaxGaugeBySource.md
@@ -0,0 +1,22 @@
+# MaxGaugeBySource
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**value** | **number** | | [optional] [default to undefined]
+**by_source** | **{ [key: string]: number; }** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { MaxGaugeBySource } from './api';
+
+const instance: MaxGaugeBySource = {
+ value,
+ by_source,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MilestoneContestEndCondition.md b/jb-ui/src/api_fsb/docs/MilestoneContestEndCondition.md
new file mode 100644
index 0000000..f1d632d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MilestoneContestEndCondition.md
@@ -0,0 +1,23 @@
+# MilestoneContestEndCondition
+
+Defines the conditions to evaluate to determine when the contest is over. Multiple conditions can be set. The contest is over once ANY conditions are met.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**max_winners** | **number** | | [optional] [default to undefined]
+**ends_at** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { MilestoneContestEndCondition } from './api';
+
+const instance: MilestoneContestEndCondition = {
+ max_winners,
+ ends_at,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/MilestoneUserView.md b/jb-ui/src/api_fsb/docs/MilestoneUserView.md
new file mode 100644
index 0000000..2836ff3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/MilestoneUserView.md
@@ -0,0 +1,66 @@
+# MilestoneUserView
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**target_amount** | **number** | Each user \&#39;wins\&#39; (receives prizes) once this target amount is reached. | [default to undefined]
+**entry_trigger** | [**ContestEntryTrigger**](ContestEntryTrigger.md) | | [optional] [default to undefined]
+**valid_for** | **string** | | [optional] [default to undefined]
+**valid_for_event** | **string** | | [optional] [default to undefined]
+**name** | **string** | Name of contest. Can be displayed to user. | [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+**contest_type** | **string** | | [optional] [default to ContestTypeEnum_Milestone]
+**end_condition** | [**MilestoneContestEndCondition**](MilestoneContestEndCondition.md) | | [default to undefined]
+**prizes** | [**Array&lt;ContestPrize&gt;**](ContestPrize.md) | | [optional] [default to undefined]
+**starts_at** | **string** | When the contest starts | [optional] [default to undefined]
+**terms_and_conditions** | **string** | | [optional] [default to undefined]
+**status** | [**ContestStatus**](ContestStatus.md) | | [optional] [default to undefined]
+**country_isos** | **string** | | [optional] [default to undefined]
+**uuid** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | Contest applies only to a single BP | [default to undefined]
+**created_at** | **string** | When this contest was created | [optional] [default to undefined]
+**updated_at** | **string** | When this contest was last modified. Does not include entries being created/modified | [optional] [default to undefined]
+**ended_at** | **string** | | [optional] [default to undefined]
+**end_reason** | [**ContestEndReason**](ContestEndReason.md) | | [optional] [default to undefined]
+**product_user_id** | **string** | | [default to undefined]
+**user_winnings** | [**Array&lt;ContestWinner&gt;**](ContestWinner.md) | The prizes won in this contest by the requested user | [optional] [default to undefined]
+**entry_type** | **string** | | [optional] [default to EntryTypeEnum_Count]
+**win_count** | **number** | The number of times the milestone has been reached. | [optional] [default to 0]
+**user_amount** | **number** | The total amount for this user for this contest | [default to undefined]
+
+## Example
+
+```typescript
+import { MilestoneUserView } from './api';
+
+const instance: MilestoneUserView = {
+ target_amount,
+ entry_trigger,
+ valid_for,
+ valid_for_event,
+ name,
+ description,
+ contest_type,
+ end_condition,
+ prizes,
+ starts_at,
+ terms_and_conditions,
+ status,
+ country_isos,
+ uuid,
+ product_id,
+ created_at,
+ updated_at,
+ ended_at,
+ end_reason,
+ product_user_id,
+ user_winnings,
+ entry_type,
+ win_count,
+ user_amount,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OfferWallCategoryRequest.md b/jb-ui/src/api_fsb/docs/OfferWallCategoryRequest.md
new file mode 100644
index 0000000..0121f7f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OfferWallCategoryRequest.md
@@ -0,0 +1,26 @@
+# OfferWallCategoryRequest
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**adwords_category** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**category** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**exclude_adwords_category** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**exclude_category** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { OfferWallCategoryRequest } from './api';
+
+const instance: OfferWallCategoryRequest = {
+ adwords_category,
+ category,
+ exclude_adwords_category,
+ exclude_category,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OfferWallInfo.md b/jb-ui/src/api_fsb/docs/OfferWallInfo.md
new file mode 100644
index 0000000..755b939
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OfferWallInfo.md
@@ -0,0 +1,20 @@
+# OfferWallInfo
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**success** | **boolean** | | [default to undefined]
+
+## Example
+
+```typescript
+import { OfferWallInfo } from './api';
+
+const instance: OfferWallInfo = {
+ success,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OfferWallRequestYieldmanParams.md b/jb-ui/src/api_fsb/docs/OfferWallRequestYieldmanParams.md
new file mode 100644
index 0000000..2bad5cf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OfferWallRequestYieldmanParams.md
@@ -0,0 +1,28 @@
+# OfferWallRequestYieldmanParams
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**conversion_factor_adj** | **number** | Centered around 0. Higher results in higher weight given to conversion (in the scoring function) | [optional] [default to 0.0]
+**dropoffrate_factor_adj** | **number** | Centered around 0. Higher results in higher penalty given to dropoffs (in the scoring function) | [optional] [default to 0.0]
+**longfail_factor_adj** | **number** | Centered around 0. Higher results in higher penalty given to long fail (in the scoring function) | [optional] [default to 0.0]
+**recon_factor_adj** | **number** | Centered around 0. Higher results in higher penalty given to recons (in the scoring function) | [optional] [default to 0.0]
+**recon_likelihood_max** | **number** | Tolerance for recon likelihood (0 to 1) | [optional] [default to 0.8]
+
+## Example
+
+```typescript
+import { OfferWallRequestYieldmanParams } from './api';
+
+const instance: OfferWallRequestYieldmanParams = {
+ conversion_factor_adj,
+ dropoffrate_factor_adj,
+ longfail_factor_adj,
+ recon_factor_adj,
+ recon_likelihood_max,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OfferwallApi.md b/jb-ui/src/api_fsb/docs/OfferwallApi.md
new file mode 100644
index 0000000..8e7591d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OfferwallApi.md
@@ -0,0 +1,1286 @@
+# OfferwallApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**marketplaceOfferwallProductIdOfferwall5fa23085Get**](#marketplaceofferwallproductidofferwall5fa23085get) | **GET** /{product_id}/offerwall/5fa23085/ | Marketplace Offerwall|
+|[**offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost**](#offerwallsoftpairblockpostproductidofferwall7a89dcdbofferwallidpost) | **POST** /{product_id}/offerwall/7a89dcdb/{offerwall_id}/ | Offerwall Softpair Block Post|
+|[**offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet**](#offerwallsoftpairblockproductidofferwall7a89dcdbget) | **GET** /{product_id}/offerwall/7a89dcdb/ | Offerwall Softpair Block|
+|[**offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost**](#offerwallsoftpairpostproductidofferwall37d1da64offerwallidpost) | **POST** /{product_id}/offerwall/37d1da64/{offerwall_id}/ | Offerwall Softpair Post|
+|[**offerwallSoftpairProductIdOfferwall37d1da64Get**](#offerwallsoftpairproductidofferwall37d1da64get) | **GET** /{product_id}/offerwall/37d1da64/ | Offerwall Softpair|
+|[**oneShotOfferwallProductIdOfferwall6f27b1aeGet**](#oneshotofferwallproductidofferwall6f27b1aeget) | **GET** /{product_id}/offerwall/6f27b1ae/ | One Shot Offerwall|
+|[**singleOfferwallProductIdOfferwall5fl8bpv5Get**](#singleofferwallproductidofferwall5fl8bpv5get) | **GET** /{product_id}/offerwall/5fl8bpv5/ | Single Offerwall|
+|[**starwallOfferwallProductIdOfferwallB59a2d2bGet**](#starwallofferwallproductidofferwallb59a2d2bget) | **GET** /{product_id}/offerwall/b59a2d2b/ | Starwall Offerwall|
+|[**starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get**](#starwallplusblockofferwallproductidofferwall7fa1b3f4get) | **GET** /{product_id}/offerwall/7fa1b3f4/ | Starwall Plus Block Offerwall|
+|[**starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get**](#starwallplusblockrecontactofferwallproductidofferwall630db2a4get) | **GET** /{product_id}/offerwall/630db2a4/ | Starwall Plus Block Recontact Offerwall|
+|[**starwallPlusOfferwallProductIdOfferwall5481f322Get**](#starwallplusofferwallproductidofferwall5481f322get) | **GET** /{product_id}/offerwall/5481f322/ | Starwall Plus Offerwall|
+|[**topNOfferwallProductIdOfferwall45b7228a7Get**](#topnofferwallproductidofferwall45b7228a7get) | **GET** /{product_id}/offerwall/45b7228a7/ | Topn Offerwall|
+|[**topNPlusBlockOfferwallProductIdOfferwallD48cce47Get**](#topnplusblockofferwallproductidofferwalld48cce47get) | **GET** /{product_id}/offerwall/d48cce47/ | Topn Plus Block Offerwall|
+|[**topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get**](#topnplusblockrecontactofferwallproductidofferwall1e5f0af8get) | **GET** /{product_id}/offerwall/1e5f0af8/ | Topn Plus Block Recontact Offerwall|
+|[**topNPlusOfferwallProductIdOfferwallB145b803Get**](#topnplusofferwallproductidofferwallb145b803get) | **GET** /{product_id}/offerwall/b145b803/ | Topn Plus Offerwall|
+|[**wXETOfferwallProductIdOfferwall55a4e1a9Get**](#wxetofferwallproductidofferwall55a4e1a9get) | **GET** /{product_id}/offerwall/55a4e1a9/ | Wxet Offerwall|
+
+# **marketplaceOfferwallProductIdOfferwall5fa23085Get**
+> MarketplaceOfferwallResponse marketplaceOfferwallProductIdOfferwall5fa23085Get()
+
+Returns buckets grouped by marketplace, one per marketplace, with the tasks ordered by quality.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+
+const { status, data } = await apiInstance.marketplaceOfferwallProductIdOfferwall5fa23085Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ minBinSize
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+
+
+### Return type
+
+**MarketplaceOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost**
+> SoftPairOfferwallResponse offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost)
+
+This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration,
+ BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let offerwallId: string; //The offerwall ID the user is interacting with (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost: BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost; //
+let sessionId: string; //A session id (uuid4.hex) (optional) (default to undefined)
+
+const { status, data } = await apiInstance.offerwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost(
+ productId,
+ offerwallId,
+ bpuid,
+ bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost,
+ sessionId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **bodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost** | **BodyOfferwallSoftpairBlockPostProductIdOfferwall7a89dcdbOfferwallIdPost**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **offerwallId** | [**string**] | The offerwall ID the user is interacting with | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **sessionId** | [**string**] | A session id (uuid4.hex) | (optional) defaults to undefined|
+
+
+### Return type
+
+**SoftPairOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet**
+> SoftPairOfferwallResponse offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet()
+
+This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. No buckets are returned if the user is blocked.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 12)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 1)
+let maxOptions: number; //Max number of options an allowed question can have (allowed to be asked) (optional) (default to 40)
+let maxQuestions: number; //Max number of missing questions on a single bin (optional) (default to 3)
+
+const { status, data } = await apiInstance.offerwallSoftpairBlockProductIdOfferwall7a89dcdbGet(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ maxOptions,
+ maxQuestions
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 12|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 1|
+| **maxOptions** | [**number**] | Max number of options an allowed question can have (allowed to be asked) | (optional) defaults to 40|
+| **maxQuestions** | [**number**] | Max number of missing questions on a single bin | (optional) defaults to 3|
+
+
+### Return type
+
+**SoftPairOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost**
+> SoftPairOfferwallResponse offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost)
+
+This is a custom endpoint for a softpair-style offerwall that allows you to update profiling answers and then immediately get back the updated offerwall
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration,
+ BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let offerwallId: string; //The offerwall ID the user is interacting with (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost: BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost; //
+let sessionId: string; //A session id (uuid4.hex) (optional) (default to undefined)
+
+const { status, data } = await apiInstance.offerwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost(
+ productId,
+ offerwallId,
+ bpuid,
+ bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost,
+ sessionId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **bodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost** | **BodyOfferwallSoftpairPostProductIdOfferwall37d1da64OfferwallIdPost**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **offerwallId** | [**string**] | The offerwall ID the user is interacting with | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **sessionId** | [**string**] | A session id (uuid4.hex) | (optional) defaults to undefined|
+
+
+### Return type
+
+**SoftPairOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **offerwallSoftpairProductIdOfferwall37d1da64Get**
+> SoftPairOfferwallResponse offerwallSoftpairProductIdOfferwall37d1da64Get()
+
+This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 12)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 1)
+let maxOptions: number; //Max number of options an allowed question can have (allowed to be asked) (optional) (default to 40)
+let maxQuestions: number; //Max number of missing questions on a single bin (optional) (default to 3)
+
+const { status, data } = await apiInstance.offerwallSoftpairProductIdOfferwall37d1da64Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ maxOptions,
+ maxQuestions
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 12|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 1|
+| **maxOptions** | [**number**] | Max number of options an allowed question can have (allowed to be asked) | (optional) defaults to 40|
+| **maxQuestions** | [**number**] | Max number of missing questions on a single bin | (optional) defaults to 3|
+
+
+### Return type
+
+**SoftPairOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **oneShotOfferwallProductIdOfferwall6f27b1aeGet**
+> OneShotOfferwallResponse oneShotOfferwallProductIdOfferwall6f27b1aeGet()
+
+Each bucket has only 1 single task, and only basic info is returned about each bucket.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 8)
+let sources: Set<Source>; //Restrict tasks to those from these marketplaces only. (optional) (default to undefined)
+
+const { status, data } = await apiInstance.oneShotOfferwallProductIdOfferwall6f27b1aeGet(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ sources
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 8|
+| **sources** | **Set&lt;Source&gt;** | Restrict tasks to those from these marketplaces only. | (optional) defaults to undefined|
+
+
+### Return type
+
+**OneShotOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **singleOfferwallProductIdOfferwall5fl8bpv5Get**
+> SingleEntryOfferWallResponse singleOfferwallProductIdOfferwall5fl8bpv5Get()
+
+Only returns a single bucket with the top scoring tasks.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+
+const { status, data } = await apiInstance.singleOfferwallProductIdOfferwall5fl8bpv5Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ minBinSize
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+
+
+### Return type
+
+**SingleEntryOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **starwallOfferwallProductIdOfferwallB59a2d2bGet**
+> StarwallOfferWallResponse starwallOfferwallProductIdOfferwallB59a2d2bGet()
+
+Returns an offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 1)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.starwallOfferwallProductIdOfferwallB59a2d2bGet(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 1|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**StarwallOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get**
+> StarwallPlusBlockOfferWallResponse starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get()
+
+Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 3)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.starwallPlusBlockOfferwallProductIdOfferwall7fa1b3f4Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 3|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**StarwallPlusBlockOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get**
+> StarwallPlusBlockRecontactOfferWallResponse starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get()
+
+Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 3)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.starwallPlusBlockRecontactOfferwallProductIdOfferwall630db2a4Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 3|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**StarwallPlusBlockRecontactOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **starwallPlusOfferwallProductIdOfferwall5481f322Get**
+> StarwallPlusOfferWallResponse starwallPlusOfferwallProductIdOfferwall5481f322Get()
+
+Same as the StarwallOfferWall, but the buckets include contents.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 3)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.starwallPlusOfferwallProductIdOfferwall5481f322Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 3|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**StarwallPlusOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **topNOfferwallProductIdOfferwall45b7228a7Get**
+> TopNOfferWallResponse topNOfferwallProductIdOfferwall45b7228a7Get()
+
+Returns an offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 1)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.topNOfferwallProductIdOfferwall45b7228a7Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 1|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**TopNOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **topNPlusBlockOfferwallProductIdOfferwallD48cce47Get**
+> TopNPlusBlockOfferWallResponse topNPlusBlockOfferwallProductIdOfferwallD48cce47Get()
+
+Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 3)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 3|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**TopNPlusBlockOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get**
+> TopNPlusBlockRecontactOfferWallResponse topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get()
+
+Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 3)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.topNPlusBlockRecontactOfferwallProductIdOfferwall1e5f0af8Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 3|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**TopNPlusBlockRecontactOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **topNPlusOfferwallProductIdOfferwallB145b803Get**
+> TopNPlusOfferWallResponse topNPlusOfferwallProductIdOfferwallB145b803Get()
+
+Same as the TopNOfferWall, but the buckets include contents.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 3)
+let minBinSize: number; //Minimum number of tasks that need to be in a bucket (optional) (default to 3)
+let splitBy: 'payout' | 'duration'; //Cluster tasks by payout or duration (optional) (default to 'payout')
+
+const { status, data } = await apiInstance.topNPlusOfferwallProductIdOfferwallB145b803Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins,
+ minBinSize,
+ splitBy
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 3|
+| **minBinSize** | [**number**] | Minimum number of tasks that need to be in a bucket | (optional) defaults to 3|
+| **splitBy** | [**&#39;payout&#39; | &#39;duration&#39;**]**Array<&#39;payout&#39; &#124; &#39;duration&#39;>** | Cluster tasks by payout or duration | (optional) defaults to 'payout'|
+
+
+### Return type
+
+**TopNPlusOfferWallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **wXETOfferwallProductIdOfferwall55a4e1a9Get**
+> WXETOfferwallResponse wXETOfferwallProductIdOfferwall55a4e1a9Get()
+
+Each bucket has only 1 single task, and only basic info is returned about each bucket.
+
+### Example
+
+```typescript
+import {
+ OfferwallApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new OfferwallApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languages: Array<string>; //Respondent\'s desired languages (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let behavior: string; //Allows using custom scoring functions. Please discuss directly with GRL. (optional) (default to undefined)
+let minPayout: string; //Decimal representation of the minimum amount of USD that any of the tasks will pay (optional) (default to undefined)
+let duration: number; //Maximum length of desired task (in seconds). (optional) (default to undefined)
+let nBins: number; //Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins=0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. (optional) (default to 8)
+
+const { status, data } = await apiInstance.wXETOfferwallProductIdOfferwall55a4e1a9Get(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languages,
+ behavior,
+ minPayout,
+ duration,
+ nBins
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languages** | **Array&lt;string&gt;** | Respondent\&#39;s desired languages (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **behavior** | [**string**] | Allows using custom scoring functions. Please discuss directly with GRL. | (optional) defaults to undefined|
+| **minPayout** | [**string**] | Decimal representation of the minimum amount of USD that any of the tasks will pay | (optional) defaults to undefined|
+| **duration** | [**number**] | Maximum length of desired task (in seconds). | (optional) defaults to undefined|
+| **nBins** | [**number**] | Number of bins requested in the offerwall. If n_bins&#x3D;1 there is no grouping and you get all duration + payout metrics on across all (as shown by the availability_count). n_bins&#x3D;0 will return back an empty bucket array, however, the availability_count will still show the total opportunities available for that bpuid + passed in parameter settings. n_bins&#x3D;∞ (or any positive integer) will return back the total number of bins capable of being uniquely split. | (optional) defaults to 8|
+
+
+### Return type
+
+**WXETOfferwallResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/OfferwallReason.md b/jb-ui/src/api_fsb/docs/OfferwallReason.md
new file mode 100644
index 0000000..84ca3ce
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OfferwallReason.md
@@ -0,0 +1,20 @@
+# OfferwallReason
+
+
+## Enum
+
+* `UserBlocked` (value: `'USER_BLOCKED'`)
+
+* `HighReconRate` (value: `'HIGH_RECON_RATE'`)
+
+* `UncommonDemographics` (value: `'UNCOMMON_DEMOGRAPHICS'`)
+
+* `UnderMinimumAge` (value: `'UNDER_MINIMUM_AGE'`)
+
+* `ExhaustedHighValueSupply` (value: `'EXHAUSTED_HIGH_VALUE_SUPPLY'`)
+
+* `AllEligibleAttempted` (value: `'ALL_ELIGIBLE_ATTEMPTED'`)
+
+* `LowCurrentSupply` (value: `'LOW_CURRENT_SUPPLY'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OneShotOfferwall.md b/jb-ui/src/api_fsb/docs/OneShotOfferwall.md
new file mode 100644
index 0000000..d15b740
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OneShotOfferwall.md
@@ -0,0 +1,29 @@
+# OneShotOfferwall
+
+Each bucket has only 1 single task, and only basic info is returned about each bucket. Offerwall code: `6f27b1ae`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;OneShotOfferwallBucket&gt;**](OneShotOfferwallBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { OneShotOfferwall } from './api';
+
+const instance: OneShotOfferwall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OneShotOfferwallBucket.md b/jb-ui/src/api_fsb/docs/OneShotOfferwallBucket.md
new file mode 100644
index 0000000..2531d91
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OneShotOfferwallBucket.md
@@ -0,0 +1,26 @@
+# OneShotOfferwallBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+**duration** | **number** | The bucket\&#39;s expected duration, in seconds | [default to undefined]
+**min_payout** | **number** | The bucket\&#39;s min payout, in usd cents | [default to undefined]
+
+## Example
+
+```typescript
+import { OneShotOfferwallBucket } from './api';
+
+const instance: OneShotOfferwallBucket = {
+ id,
+ uri,
+ duration,
+ min_payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OneShotOfferwallResponse.md b/jb-ui/src/api_fsb/docs/OneShotOfferwallResponse.md
new file mode 100644
index 0000000..66216f6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OneShotOfferwallResponse.md
@@ -0,0 +1,22 @@
+# OneShotOfferwallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**OneShotOfferwall**](OneShotOfferwall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { OneShotOfferwallResponse } from './api';
+
+const instance: OneShotOfferwallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/OrderData.md b/jb-ui/src/api_fsb/docs/OrderData.md
new file mode 100644
index 0000000..56c21c3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/OrderData.md
@@ -0,0 +1,37 @@
+# OrderData
+
+Stores payout-type-specific order information that is returned from the external payout provider.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_CashInMail]
+**shipping_cost** | **number** | | [default to undefined]
+**tracking_number** | **string** | | [optional] [default to undefined]
+**shipping_method** | [**ShippingMethod**](ShippingMethod.md) | | [optional] [default to undefined]
+**carrier** | [**ShippingCarrier**](ShippingCarrier.md) | | [optional] [default to undefined]
+**ship_date** | **string** | | [optional] [default to undefined]
+**estimated_delivery_date** | **string** | | [optional] [default to undefined]
+**delivery_status** | [**DeliveryStatus**](DeliveryStatus.md) | | [optional] [default to undefined]
+**last_updated** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { OrderData } from './api';
+
+const instance: OrderData = {
+ type,
+ shipping_cost,
+ tracking_number,
+ shipping_method,
+ carrier,
+ ship_date,
+ estimated_delivery_date,
+ delivery_status,
+ last_updated,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/POPFinancial.md b/jb-ui/src/api_fsb/docs/POPFinancial.md
new file mode 100644
index 0000000..a262efc
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/POPFinancial.md
@@ -0,0 +1,35 @@
+# POPFinancial
+
+We can\'t use our USDCent class in here because aside from it not supporting negative values for our adjustments, FastAPI also complains because it doesn\'t know how to generate documentation for it. - Max 2024-06-25
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**product_id** | **string** | | [optional] [default to undefined]
+**time** | **string** | The starting time block for the respective \&#39;Period\&#39; thatthis grouping is on. The &#x60;time&#x60; could be the start of a 1 minute or 1 hour block for example. | [default to undefined]
+**payout** | **number** | The total amount (in USD cents) that the Brokerage Producthas earned within a respective time period. | [optional] [default to 0]
+**adjustment** | **number** | The total amount (in USD cents) that the Brokerage Producthas had adjusted within a respective time period. Most ofthe time, this will be negative due to Complete to Incomplete reconciliations. However, it can also be positive due to Incomplete to Complete adjustments. | [default to undefined]
+**adjustment_types** | [**Array&lt;AdjustmentType&gt;**](AdjustmentType.md) | | [default to undefined]
+**expense** | **number** | For Product accounts that are setup with Respondent payouts,competitions, user bonuses, or other associated \&#39;costs\&#39;, thoseexpenses are accounted for here. This will be negative forthose types of costs. | [default to undefined]
+**net** | **number** | This is the sum of the Payout total, Adjustment and any Expenses total. It can be positive or negative for any specific time period. | [default to undefined]
+**payment** | **number** | Any ACH or Wire amount that was issued between GRL and the Supplier. | [default to undefined]
+
+## Example
+
+```typescript
+import { POPFinancial } from './api';
+
+const instance: POPFinancial = {
+ product_id,
+ time,
+ payout,
+ adjustment,
+ adjustment_types,
+ expense,
+ net,
+ payment,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PatternValidation.md b/jb-ui/src/api_fsb/docs/PatternValidation.md
new file mode 100644
index 0000000..98f79d8
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PatternValidation.md
@@ -0,0 +1,22 @@
+# PatternValidation
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**message** | **string** | Message to display if validation fails | [default to undefined]
+**pattern** | **string** | Regex string to validate. min_length and max_length are checked separately, even if they are part of the regex. | [default to undefined]
+
+## Example
+
+```typescript
+import { PatternValidation } from './api';
+
+const instance: PatternValidation = {
+ message,
+ pattern,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Payload.md b/jb-ui/src/api_fsb/docs/Payload.md
new file mode 100644
index 0000000..69a37f8
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Payload.md
@@ -0,0 +1,40 @@
+# Payload
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**event_type** | **string** | | [optional] [default to EventTypeEnum_SessionFinish]
+**source** | [**Source**](Source.md) | | [default to undefined]
+**survey_id** | **string** | | [default to undefined]
+**quota_id** | **string** | | [optional] [default to undefined]
+**country_iso** | **string** | | [default to undefined]
+**duration_sec** | **number** | | [default to undefined]
+**status** | [**Status**](Status.md) | | [default to undefined]
+**status_code_1** | [**StatusCode1**](StatusCode1.md) | | [optional] [default to undefined]
+**status_code_2** | [**SessionStatusCode2**](SessionStatusCode2.md) | | [optional] [default to undefined]
+**cpi** | **number** | | [optional] [default to undefined]
+**user_payout** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { Payload } from './api';
+
+const instance: Payload = {
+ event_type,
+ source,
+ survey_id,
+ quota_id,
+ country_iso,
+ duration_sec,
+ status,
+ status_code_1,
+ status_code_2,
+ cpi,
+ user_payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PayoutConfig.md b/jb-ui/src/api_fsb/docs/PayoutConfig.md
new file mode 100644
index 0000000..84a2fd3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PayoutConfig.md
@@ -0,0 +1,23 @@
+# PayoutConfig
+
+Store configuration related to payouts, payout transformation, and user payout formatting.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**payout_format** | **string** | | [optional] [default to undefined]
+**payout_transformation** | [**PayoutTransformation**](PayoutTransformation.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { PayoutConfig } from './api';
+
+const instance: PayoutConfig = {
+ payout_format,
+ payout_transformation,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PayoutStatus.md b/jb-ui/src/api_fsb/docs/PayoutStatus.md
new file mode 100644
index 0000000..c3259a6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PayoutStatus.md
@@ -0,0 +1,19 @@
+# PayoutStatus
+
+The max size of the db field that holds this value is 20, so please don\'t add new values longer than that!
+
+## Enum
+
+* `Pending` (value: `'PENDING'`)
+
+* `Approved` (value: `'APPROVED'`)
+
+* `Rejected` (value: `'REJECTED'`)
+
+* `Cancelled` (value: `'CANCELLED'`)
+
+* `Failed` (value: `'FAILED'`)
+
+* `Complete` (value: `'COMPLETE'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PayoutSummary.md b/jb-ui/src/api_fsb/docs/PayoutSummary.md
new file mode 100644
index 0000000..391e51e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PayoutSummary.md
@@ -0,0 +1,35 @@
+# PayoutSummary
+
+Payouts are in Integer USD Cents
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**min** | **number** | | [default to undefined]
+**max** | **number** | | [default to undefined]
+**mean** | **number** | | [optional] [default to undefined]
+**q1** | **number** | | [default to undefined]
+**q2** | **number** | | [default to undefined]
+**q3** | **number** | | [default to undefined]
+**lower_whisker** | **number** | | [readonly] [default to undefined]
+**upper_whisker** | **number** | | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { PayoutSummary } from './api';
+
+const instance: PayoutSummary = {
+ min,
+ max,
+ mean,
+ q1,
+ q2,
+ q3,
+ lower_whisker,
+ upper_whisker,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PayoutTransformation.md b/jb-ui/src/api_fsb/docs/PayoutTransformation.md
new file mode 100644
index 0000000..378fde0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PayoutTransformation.md
@@ -0,0 +1,23 @@
+# PayoutTransformation
+
+This model describe how the bp_payout is converted to the user_payout. If None, the user_payout is None. If the user_wallet_enabled is `False`, the user_payout is used to 1) know how to transform the expected payouts for offerwall buckets (if min_payout is requested, this is based on the user_payout) 2) show the user (using the payout_format) how much they made (in the Task Status Response). If the user_wallet_enabled is `True`, then in addition to the above, the user_payout is the amount actually paid to the user\'s wallet.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**f** | **string** | The name of the transformation function to use. | [default to undefined]
+**kwargs** | [**PayoutTransformationPercentArgs**](PayoutTransformationPercentArgs.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { PayoutTransformation } from './api';
+
+const instance: PayoutTransformation = {
+ f,
+ kwargs,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PayoutTransformationPercentArgs.md b/jb-ui/src/api_fsb/docs/PayoutTransformationPercentArgs.md
new file mode 100644
index 0000000..93e7331
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PayoutTransformationPercentArgs.md
@@ -0,0 +1,24 @@
+# PayoutTransformationPercentArgs
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**pct** | **number** | The percentage of the bp_payout to pay the user | [default to undefined]
+**min_payout** | **string** | | [optional] [default to undefined]
+**max_payout** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { PayoutTransformationPercentArgs } from './api';
+
+const instance: PayoutTransformationPercentArgs = {
+ pct,
+ min_payout,
+ max_payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PayoutType.md b/jb-ui/src/api_fsb/docs/PayoutType.md
new file mode 100644
index 0000000..a918be1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PayoutType.md
@@ -0,0 +1,29 @@
+# PayoutType
+
+The method in which the requested payout is delivered.
+
+## Enum
+
+* `Paypal` (value: `'PAYPAL'`)
+
+* `Tango` (value: `'TANGO'`)
+
+* `Dwolla` (value: `'DWOLLA'`)
+
+* `Ach` (value: `'ACH'`)
+
+* `Wire` (value: `'WIRE'`)
+
+* `CashInMail` (value: `'CASH_IN_MAIL'`)
+
+* `Prize` (value: `'PRIZE'`)
+
+* `Amt` (value: `'AMT'`)
+
+* `AmtBonus` (value: `'AMT_BONUS'`)
+
+* `AmtAssignment` (value: `'AMT_ASSIGNMENT'`)
+
+* `AmtAssignment2` (value: `'AMT_ASSIGNMENT'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PaypalCashoutMethodData.md b/jb-ui/src/api_fsb/docs/PaypalCashoutMethodData.md
new file mode 100644
index 0000000..c347537
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PaypalCashoutMethodData.md
@@ -0,0 +1,22 @@
+# PaypalCashoutMethodData
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_Paypal]
+**email** | **string** | Email address of the paypal user | [default to undefined]
+
+## Example
+
+```typescript
+import { PaypalCashoutMethodData } from './api';
+
+const instance: PaypalCashoutMethodData = {
+ type,
+ email,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PingMessage.md b/jb-ui/src/api_fsb/docs/PingMessage.md
new file mode 100644
index 0000000..3b0bb4d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PingMessage.md
@@ -0,0 +1,22 @@
+# PingMessage
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | **string** | | [optional] [default to KindEnum_Ping]
+**timestamp** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { PingMessage } from './api';
+
+const instance: PingMessage = {
+ kind,
+ timestamp,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/PongMessage.md b/jb-ui/src/api_fsb/docs/PongMessage.md
new file mode 100644
index 0000000..60fdd37
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PongMessage.md
@@ -0,0 +1,22 @@
+# PongMessage
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | **string** | | [optional] [default to KindEnum_Pong]
+**timestamp** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { PongMessage } from './api';
+
+const instance: PongMessage = {
+ kind,
+ timestamp,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Product.md b/jb-ui/src/api_fsb/docs/Product.md
new file mode 100644
index 0000000..3dfe1d3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Product.md
@@ -0,0 +1,72 @@
+# Product
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier of the Brokerage Product | [optional] [default to undefined]
+**name** | **string** | Name of the Brokerage Product. Must be unique within a Team | [default to undefined]
+**enabled** | **boolean** | This is only used to hard block a Product in order to immediately &amp; safely protect against fraud entrances. | [optional] [default to true]
+**payments_enabled** | **boolean** | This is only to determine if ACH or Wire payments should be made to the Produce. | [optional] [default to true]
+**created** | **string** | | [optional] [default to undefined]
+**team_id** | **string** | | [optional] [default to undefined]
+**business_id** | **string** | | [optional] [default to undefined]
+**tags** | [**Set&lt;SupplierTag&gt;**](SupplierTag.md) | Tags which are used to annotate supplier traffic | [optional] [default to undefined]
+**commission_pct** | **string** | | [optional] [default to '0.05']
+**redirect_url** | **string** | Where to redirect the user after finishing a session. When a user get redirected back to the supplier, a query param will be added with the name \&#39;tsid\&#39;, and the value of the TSID for the session. For example: callback_uri: \&#39;https://www.example.com/test/?a&#x3D;1&amp;b&#x3D;2\&#39; might result in the user getting redirected to: \&#39;https://www.example.com/grl-callback/?a&#x3D;1&amp;b&#x3D;2&amp;tsid&#x3D;c6ab6ba1e75b44e2bf5aab00fc68e3b7\&#39;. | [default to undefined]
+**harmonizer_domain** | **string** | This is the domain that is used for the GRS (General Research Survey) platform. This is a simple javascript application which may profile the respondent for anyprofiling questions, along with collecting any browserbased security information. The value is a scheme+domain only (no path). | [optional] [default to 'https://profile.generalresearch.com/']
+**sources_config** | [**SourcesConfig**](SourcesConfig.md) | | [optional] [default to undefined]
+**session_config** | [**SessionConfig**](SessionConfig.md) | | [optional] [default to undefined]
+**payout_config** | [**PayoutConfig**](PayoutConfig.md) | | [optional] [default to undefined]
+**user_wallet_config** | [**UserWalletConfig**](UserWalletConfig.md) | | [optional] [default to undefined]
+**user_create_config** | [**UserCreateConfig**](UserCreateConfig.md) | | [optional] [default to undefined]
+**offerwall_config** | **object** | | [optional] [default to undefined]
+**profiling_config** | [**ProfilingConfig**](ProfilingConfig.md) | | [optional] [default to undefined]
+**user_health_config** | [**UserHealthConfig**](UserHealthConfig.md) | | [optional] [default to undefined]
+**yield_man_config** | [**YieldManConfig**](YieldManConfig.md) | | [optional] [default to undefined]
+**balance** | [**ProductBalances**](ProductBalances.md) | | [optional] [default to undefined]
+**payouts_total_str** | **string** | | [optional] [default to undefined]
+**payouts_total** | **number** | | [optional] [default to undefined]
+**payouts** | [**Array&lt;BrokerageProductPayoutEvent&gt;**](BrokerageProductPayoutEvent.md) | | [optional] [default to undefined]
+**pop_financial** | [**Array&lt;POPFinancial&gt;**](POPFinancial.md) | | [optional] [default to undefined]
+**bp_account** | [**LedgerAccount**](LedgerAccount.md) | | [optional] [default to undefined]
+**user_wallet** | [**UserWalletConfig**](UserWalletConfig.md) | | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { Product } from './api';
+
+const instance: Product = {
+ id,
+ name,
+ enabled,
+ payments_enabled,
+ created,
+ team_id,
+ business_id,
+ tags,
+ commission_pct,
+ redirect_url,
+ harmonizer_domain,
+ sources_config,
+ session_config,
+ payout_config,
+ user_wallet_config,
+ user_create_config,
+ offerwall_config,
+ profiling_config,
+ user_health_config,
+ yield_man_config,
+ balance,
+ payouts_total_str,
+ payouts_total,
+ payouts,
+ pop_financial,
+ bp_account,
+ user_wallet,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ProductBalances.md b/jb-ui/src/api_fsb/docs/ProductBalances.md
new file mode 100644
index 0000000..92a9170
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ProductBalances.md
@@ -0,0 +1,68 @@
+# ProductBalances
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**product_id** | **string** | | [optional] [default to undefined]
+**last_event** | **string** | | [optional] [default to undefined]
+**bp_payment_credit** | **number** | The total amount that has been earned by the Task completes, for this Brokerage Product account. | [optional] [default to 0]
+**adjustment_credit** | **number** | Positive reconciliations issued back to the Brokerage Product account. | [optional] [default to 0]
+**adjustment_debit** | **number** | Negative reconciliations for any Task completes | [optional] [default to 0]
+**supplier_credit** | **number** | ACH or Wire amounts issued to GRL from a Supplier to recoup for a negative Brokerage Product balance | [optional] [default to 0]
+**supplier_debit** | **number** | ACH or Wire amounts sent to a Supplier | [optional] [default to 0]
+**user_bonus_credit** | **number** | If a respondent ever pays back an product account. | [optional] [default to 0]
+**user_bonus_debit** | **number** | Pay a user into their wallet balance. There is no fee here. There is only a fee when the user requests a payout.The bonus could be as a bribe, winnings for a contest, leaderboard, etc. | [optional] [default to 0]
+**issued_payment** | **number** | This is the amount that we decide to credit as havingtaken from this Product. If there is any amount not issuedit is summed up over the Business to offset any negativebalances elsewhere. | [optional] [default to 0]
+**payout** | **number** | The sum amount of all Task payouts | [readonly] [default to undefined]
+**payout_usd_str** | **string** | | [readonly] [default to undefined]
+**adjustment** | **number** | The sum amount of all Task Adjustments | [readonly] [default to undefined]
+**expense** | **number** | The sum amount of any associated Product Expenses (eg: user bonuses) | [readonly] [default to undefined]
+**net** | **number** | The Product\&#39;s Net Earnings which is equal to the totalamount of Task Payouts, with Task Adjustments and anyProduct Expenses deducted. This can be positive ornegative. | [readonly] [default to undefined]
+**payment** | **number** | The sum amount of all Supplier Payments (eg ACH or Wire transfers) | [readonly] [default to undefined]
+**payment_usd_str** | **string** | | [readonly] [default to undefined]
+**balance** | **number** | The Product\&#39;s Balance which is equal to the Product\&#39;s Netamount with already issued Supplier Payments deducted. This can be positive or negative. | [readonly] [default to undefined]
+**retainer** | **number** | The Smart Retainer is an about of money that is held byGRL to account for any Task Adjustments that may occurin the future. The amount will always be positive, andif the Product\&#39;s balance is negative, the retainer will be $0.00 as the Product is not eligible for any SupplierPayments either way. | [readonly] [default to undefined]
+**retainer_usd_str** | **string** | | [readonly] [default to undefined]
+**available_balance** | **number** | The Available Balance is the amount that is currently, andimmediately available for withdraw from the Supplier\&#39;sbalance. Supplier Payments are made every Friday for Businesses with an ACH connected Bank Account to GRL, while a Business that requires an International Wire are issued on the last Friday of every Month. | [readonly] [default to undefined]
+**available_balance_usd_str** | **string** | | [readonly] [default to undefined]
+**recoup** | **number** | | [readonly] [default to undefined]
+**recoup_usd_str** | **string** | | [readonly] [default to undefined]
+**adjustment_percent** | **number** | The percentage of USDCent value that has been adjustedover all time for this Product. | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { ProductBalances } from './api';
+
+const instance: ProductBalances = {
+ product_id,
+ last_event,
+ bp_payment_credit,
+ adjustment_credit,
+ adjustment_debit,
+ supplier_credit,
+ supplier_debit,
+ user_bonus_credit,
+ user_bonus_debit,
+ issued_payment,
+ payout,
+ payout_usd_str,
+ adjustment,
+ expense,
+ net,
+ payment,
+ payment_usd_str,
+ balance,
+ retainer,
+ retainer_usd_str,
+ available_balance,
+ available_balance_usd_str,
+ recoup,
+ recoup_usd_str,
+ adjustment_percent,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ProductUserApi.md b/jb-ui/src/api_fsb/docs/ProductUserApi.md
new file mode 100644
index 0000000..be0f30e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ProductUserApi.md
@@ -0,0 +1,179 @@
+# ProductUserApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet**](#userprofilefilterbymarketplacepidproductiduserbymarketplacepidget) | **GET** /{product_id}/user/by-marketplace-pid/ | User Profile Filter By Marketplace Pid|
+|[**userProfileProductIdUserProductUserIdProfileGet**](#userprofileproductiduserproductuseridprofileget) | **GET** /{product_id}/user/{product_user_id}/profile/ | User Profile|
+|[**userProfileUpdateProductIdUserProductUserIdProfilePatch**](#userprofileupdateproductiduserproductuseridprofilepatch) | **PATCH** /{product_id}/user/{product_user_id}/profile/ | User Profile Update|
+
+# **userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet**
+> UserProfilesResponse userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet()
+
+
+### Example
+
+```typescript
+import {
+ ProductUserApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProductUserApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let source: Source; //The marketplace to search (default to undefined)
+let pid: Array<string>; //The user\'s marketplace PID. Supports multiple params (default to undefined)
+
+const { status, data } = await apiInstance.userProfileFilterByMarketplacePidProductIdUserByMarketplacePidGet(
+ productId,
+ source,
+ pid
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **source** | **Source** | The marketplace to search | defaults to undefined|
+| **pid** | **Array&lt;string&gt;** | The user\&#39;s marketplace PID. Supports multiple params | defaults to undefined|
+
+
+### Return type
+
+**UserProfilesResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **userProfileProductIdUserProductUserIdProfileGet**
+> UserProfileResponse userProfileProductIdUserProductUserIdProfileGet()
+
+
+### Example
+
+```typescript
+import {
+ ProductUserApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProductUserApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let productUserId: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.userProfileProductIdUserProductUserIdProfileGet(
+ productId,
+ productUserId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **productUserId** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**UserProfileResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **userProfileUpdateProductIdUserProductUserIdProfilePatch**
+> StatusResponse userProfileUpdateProductIdUserProductUserIdProfilePatch(userProfileUpdateRequest)
+
+
+### Example
+
+```typescript
+import {
+ ProductUserApi,
+ Configuration,
+ UserProfileUpdateRequest
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProductUserApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let productUserId: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let userProfileUpdateRequest: UserProfileUpdateRequest; //
+
+const { status, data } = await apiInstance.userProfileUpdateProductIdUserProductUserIdProfilePatch(
+ productId,
+ productUserId,
+ userProfileUpdateRequest
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **userProfileUpdateRequest** | **UserProfileUpdateRequest**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **productUserId** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**StatusResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/ProfilingConfig.md b/jb-ui/src/api_fsb/docs/ProfilingConfig.md
new file mode 100644
index 0000000..22d329d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ProfilingConfig.md
@@ -0,0 +1,34 @@
+# ProfilingConfig
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**enabled** | **boolean** | If False, the harmonizer/profiling system is not used at all. This should never be False unless special circumstances | [optional] [default to true]
+**grs_enabled** | **boolean** | If grs_enabled is False, and is_grs is passed in the profiling-questions call, then don\&#39;t actually return any questions. This allows a client to hit the endpoint with no limit and still get questions. In effect, this means that we\&#39;ll redirect the user through the GRS system but won\&#39;t present them any questions. | [optional] [default to true]
+**n_questions** | **number** | | [optional] [default to undefined]
+**max_questions** | **number** | The max number of questions we would ask in a session | [optional] [default to 10]
+**avg_question_count** | **number** | The average number of questions to ask in a session | [optional] [default to 5]
+**task_injection_freq_mult** | **number** | Scale how frequently we inject profiling questions, relative to the default.1 is default, 2 is twice as often. 10 means always. 0.5 half as often | [optional] [default to 1]
+**non_us_mult** | **number** | Non-us multiplier, used to increase freq and length of profilers in all non-us countries.This value is multiplied by task_injection_freq_mult and avg_question_count. | [optional] [default to 2]
+**hidden_questions_expiration_hours** | **number** | How frequently we should refresh hidden questions | [optional] [default to 168]
+
+## Example
+
+```typescript
+import { ProfilingConfig } from './api';
+
+const instance: ProfilingConfig = {
+ enabled,
+ grs_enabled,
+ n_questions,
+ max_questions,
+ avg_question_count,
+ task_injection_freq_mult,
+ non_us_mult,
+ hidden_questions_expiration_hours,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ProfilingInfoResponse.md b/jb-ui/src/api_fsb/docs/ProfilingInfoResponse.md
new file mode 100644
index 0000000..598f68b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ProfilingInfoResponse.md
@@ -0,0 +1,24 @@
+# ProfilingInfoResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**profiling_info** | [**Array&lt;UpkProperty&gt;**](UpkProperty.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { ProfilingInfoResponse } from './api';
+
+const instance: ProfilingInfoResponse = {
+ status,
+ msg,
+ profiling_info,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ProfilingQuestionsApi.md b/jb-ui/src/api_fsb/docs/ProfilingQuestionsApi.md
new file mode 100644
index 0000000..384011a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ProfilingQuestionsApi.md
@@ -0,0 +1,264 @@
+# ProfilingQuestionsApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**getProfilingQuestionsProductIdProfilingQuestionsGet**](#getprofilingquestionsproductidprofilingquestionsget) | **GET** /{product_id}/profiling-questions/ | Get Profiling Questions|
+|[**profilingInfoProductIdProfilingInfoGet**](#profilinginfoproductidprofilinginfoget) | **GET** /{product_id}/profiling-info/ | Profiling Info|
+|[**submitProfilingQuestionsProductIdProfilingQuestionsPost**](#submitprofilingquestionsproductidprofilingquestionspost) | **POST** /{product_id}/profiling-questions/ | Submit Profiling Questions|
+|[**userProfileProductIdUserProfileGet**](#userprofileproductiduserprofileget) | **GET** /{product_id}/user-profile/ | User Profile|
+
+# **getProfilingQuestionsProductIdProfilingQuestionsGet**
+> UpkQuestionResponse getProfilingQuestionsProductIdProfilingQuestionsGet()
+
+Gets a list of profiling questions to ask this user. These questions are, as of right now, unanswered. Once a question is answered, it (and any other question whose answer is inferred from other answers) is removed from the list. The questions returned are ordered by importance (the key task_score) in descending order.
+
+### Example
+
+```typescript
+import {
+ ProfilingQuestionsApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProfilingQuestionsApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let ip: string; //Respondent\'s IP address (IPv4 or IPv6). Either \'ip\' must be provided, or \'country_iso\' must be provided if \'ip\' is not provided. (optional) (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (optional) (default to undefined)
+let languageIso: string; //Respondent\'s desired language (ISO 639-2/B, lowercase) (optional) (default to undefined)
+let limit: number; //Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions\' importance. (optional) (default to undefined)
+let isGrs: boolean; //If it\'s the GRS system. (optional) (default to false)
+
+const { status, data } = await apiInstance.getProfilingQuestionsProductIdProfilingQuestionsGet(
+ productId,
+ bpuid,
+ ip,
+ countryIso,
+ languageIso,
+ limit,
+ isGrs
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **ip** | [**string**] | Respondent\&#39;s IP address (IPv4 or IPv6). Either \&#39;ip\&#39; must be provided, or \&#39;country_iso\&#39; must be provided if \&#39;ip\&#39; is not provided. | (optional) defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | (optional) defaults to undefined|
+| **languageIso** | [**string**] | Respondent\&#39;s desired language (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+| **limit** | [**number**] | Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions\&#39; importance. | (optional) defaults to undefined|
+| **isGrs** | [**boolean**] | If it\&#39;s the GRS system. | (optional) defaults to false|
+
+
+### Return type
+
+**UpkQuestionResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **profilingInfoProductIdProfilingInfoGet**
+> ProfilingInfoResponse profilingInfoProductIdProfilingInfoGet()
+
+Get UPK Ontology (list of properties, property info, and allowed values)
+
+### Example
+
+```typescript
+import {
+ ProfilingQuestionsApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProfilingQuestionsApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (default to undefined)
+let languageIso: string; //Respondent\'s desired language (ISO 639-2/B, lowercase) (optional) (default to undefined)
+
+const { status, data } = await apiInstance.profilingInfoProductIdProfilingInfoGet(
+ productId,
+ countryIso,
+ languageIso
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | defaults to undefined|
+| **languageIso** | [**string**] | Respondent\&#39;s desired language (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+
+
+### Return type
+
+**ProfilingInfoResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **submitProfilingQuestionsProductIdProfilingQuestionsPost**
+> StatusResponse submitProfilingQuestionsProductIdProfilingQuestionsPost(bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost)
+
+Send the answers to one or more of these questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\"
+
+### Example
+
+```typescript
+import {
+ ProfilingQuestionsApi,
+ Configuration,
+ BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProfilingQuestionsApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost: BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost; //
+let sessionId: string; //The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional. (optional) (default to undefined)
+let async: boolean; //For internal use. (optional) (default to true)
+
+const { status, data } = await apiInstance.submitProfilingQuestionsProductIdProfilingQuestionsPost(
+ productId,
+ bpuid,
+ bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost,
+ sessionId,
+ async
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **bodySubmitProfilingQuestionsProductIdProfilingQuestionsPost** | **BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **sessionId** | [**string**] | The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional. | (optional) defaults to undefined|
+| **async** | [**boolean**] | For internal use. | (optional) defaults to true|
+
+
+### Return type
+
+**StatusResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **userProfileProductIdUserProfileGet**
+> UserInfoResponse userProfileProductIdUserProfileGet()
+
+
+### Example
+
+```typescript
+import {
+ ProfilingQuestionsApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ProfilingQuestionsApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let countryIso: string; //Respondent\'s country code (ISO 3166-1 alpha-2, lowercase) (default to undefined)
+let languageIso: string; //Respondent\'s desired language (ISO 639-2/B, lowercase) (optional) (default to undefined)
+
+const { status, data } = await apiInstance.userProfileProductIdUserProfileGet(
+ productId,
+ bpuid,
+ countryIso,
+ languageIso
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **countryIso** | [**string**] | Respondent\&#39;s country code (ISO 3166-1 alpha-2, lowercase) | defaults to undefined|
+| **languageIso** | [**string**] | Respondent\&#39;s desired language (ISO 639-2/B, lowercase) | (optional) defaults to undefined|
+
+
+### Return type
+
+**UserInfoResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/PropertyType.md b/jb-ui/src/api_fsb/docs/PropertyType.md
new file mode 100644
index 0000000..9e64b49
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/PropertyType.md
@@ -0,0 +1,12 @@
+# PropertyType
+
+
+## Enum
+
+* `I` (value: `'i'`)
+
+* `N` (value: `'n'`)
+
+* `X` (value: `'x'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/RaffleUserView.md b/jb-ui/src/api_fsb/docs/RaffleUserView.md
new file mode 100644
index 0000000..f73f055
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/RaffleUserView.md
@@ -0,0 +1,68 @@
+# RaffleUserView
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **string** | Name of contest. Can be displayed to user. | [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+**contest_type** | **string** | | [optional] [default to ContestTypeEnum_Raffle]
+**end_condition** | [**ContestEndCondition**](ContestEndCondition.md) | | [default to undefined]
+**prizes** | [**Array&lt;ContestPrize&gt;**](ContestPrize.md) | | [optional] [default to undefined]
+**starts_at** | **string** | When the contest starts | [optional] [default to undefined]
+**terms_and_conditions** | **string** | | [optional] [default to undefined]
+**status** | [**ContestStatus**](ContestStatus.md) | | [optional] [default to undefined]
+**country_isos** | **string** | | [optional] [default to undefined]
+**uuid** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | Contest applies only to a single BP | [default to undefined]
+**created_at** | **string** | When this contest was created | [optional] [default to undefined]
+**updated_at** | **string** | When this contest was last modified. Does not include entries being created/modified | [optional] [default to undefined]
+**ended_at** | **string** | | [optional] [default to undefined]
+**end_reason** | [**ContestEndReason**](ContestEndReason.md) | | [optional] [default to undefined]
+**product_user_id** | **string** | | [default to undefined]
+**user_winnings** | [**Array&lt;ContestWinner&gt;**](ContestWinner.md) | The prizes won in this contest by the requested user | [optional] [default to undefined]
+**entry_type** | **string** | | [optional] [default to EntryTypeEnum_Cash]
+**entry_rule** | [**ContestEntryRule**](ContestEntryRule.md) | | [optional] [default to undefined]
+**current_amount** | [**CurrentAmount**](CurrentAmount.md) | | [optional] [default to undefined]
+**current_participants** | **number** | Count of unique participants | [optional] [default to 0]
+**user_amount** | [**UserAmount**](UserAmount.md) | | [default to undefined]
+**user_amount_today** | [**UserAmountToday**](UserAmountToday.md) | | [default to undefined]
+**current_win_probability** | **number** | Probability of this user winning 1 or more prizes, if the contestended right now | [readonly] [default to undefined]
+**projected_win_probability** | **number** | | [default to undefined]
+
+## Example
+
+```typescript
+import { RaffleUserView } from './api';
+
+const instance: RaffleUserView = {
+ name,
+ description,
+ contest_type,
+ end_condition,
+ prizes,
+ starts_at,
+ terms_and_conditions,
+ status,
+ country_isos,
+ uuid,
+ product_id,
+ created_at,
+ updated_at,
+ ended_at,
+ end_reason,
+ product_user_id,
+ user_winnings,
+ entry_type,
+ entry_rule,
+ current_amount,
+ current_participants,
+ user_amount,
+ user_amount_today,
+ current_win_probability,
+ projected_win_probability,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/RedemptionCurrency.md b/jb-ui/src/api_fsb/docs/RedemptionCurrency.md
new file mode 100644
index 0000000..cd6f179
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/RedemptionCurrency.md
@@ -0,0 +1,27 @@
+# RedemptionCurrency
+
+Supported Currencies for Foreign Redemptions
+
+## Enum
+
+* `Usd` (value: `'USD'`)
+
+* `Cad` (value: `'CAD'`)
+
+* `Gbp` (value: `'GBP'`)
+
+* `Eur` (value: `'EUR'`)
+
+* `Inr` (value: `'INR'`)
+
+* `Aud` (value: `'AUD'`)
+
+* `Pln` (value: `'PLN'`)
+
+* `Sek` (value: `'SEK'`)
+
+* `Sgd` (value: `'SGD'`)
+
+* `Mxn` (value: `'MXN'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ReportApi.md b/jb-ui/src/api_fsb/docs/ReportApi.md
new file mode 100644
index 0000000..daaca43
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ReportApi.md
@@ -0,0 +1,64 @@
+# ReportApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**reportTaskProductIdReportPost**](#reporttaskproductidreportpost) | **POST** /{product_id}/report/ | Report Task|
+
+# **reportTaskProductIdReportPost**
+> StatusResponse reportTaskProductIdReportPost(reportTask)
+
+Send a \"Task Report\" for a respondent\'s latest started survey, regardless of the survey\'s outcome. Task Reports cannot be provided for task attempts by tsid, or through any other method, they must be given immediately after the respondent\'s task attempt. If a latest attempt can\'t be found, a ReportTaskResponse is still returned. If multiple reasons want to be provided, they should be done at the same time. If multiple reports are given for the same latest started task, the note attribute will be overwritten, while the new unique reasons will be appended to the task attempt. Task Report system contributions by client applications are immediately leveraged to aid yield management strategies. For those reasons, it\'s important that the respondent submits a Task Report as soon as possible and applications doesn\'t offload this request for a later time. Task Report timestamps are a critical component of understanding a Task experience for a respondent. For the BP to tell us about a bad survey they want to report The POSTed data looks like: { \'bpuid\': \'1234\', \'reasons\': [2], \'notes\': \"This survey was the worst!\" } Returns {\'status\': \'success\', \'msg\': error_msg}
+
+### Example
+
+```typescript
+import {
+ ReportApi,
+ Configuration,
+ ReportTask
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new ReportApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let reportTask: ReportTask; //
+
+const { status, data } = await apiInstance.reportTaskProductIdReportPost(
+ productId,
+ reportTask
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **reportTask** | **ReportTask**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+
+
+### Return type
+
+**StatusResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/ReportNotes.md b/jb-ui/src/api_fsb/docs/ReportNotes.md
new file mode 100644
index 0000000..cee38cb
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ReportNotes.md
@@ -0,0 +1,18 @@
+# ReportNotes
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { ReportNotes } from './api';
+
+const instance: ReportNotes = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ReportTask.md b/jb-ui/src/api_fsb/docs/ReportTask.md
new file mode 100644
index 0000000..8f5560b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ReportTask.md
@@ -0,0 +1,24 @@
+# ReportTask
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bpuid** | **string** | The unique identifier for the user, which is set by the Supplier. | [default to undefined]
+**reasons** | [**Array&lt;ReportValue&gt;**](ReportValue.md) | The reason a user reported a task. Allowed values: - __0__ *(REASON_UNKNOWN)*: Used to indicate the user exited the task without giving feedback - __1__ *(TECHNICAL_ERROR)*: Task is in the wrong language/country, unanswerable question, won\&#39;t proceed to next question, loading forever, error message - __2__ *(NO_REDIRECT)*: Task ended (completed or failed, and showed the user some dialog indicating the task was over), but failed to redirect - __3__ *(PRIVACY_INVASION)*: Asked for full name, home address, identity on another site, cc - __4__ *(UNCOMFORTABLE_TOPICS)*: Asked about children, employer, medical issues, drug use, STDs, etc. - __5__ *(ASKED_FOR_NOT_ALLOWED_ACTION)*: Asked to install software, signup/login to external site, access webcam, promise to pay using external site, etc. - __6__ *(BAD_ON_MOBILE)*: Task doesn\&#39;t work well on a mobile device - __7__ *(DIDNT_LIKE)*: Too long, too boring, confusing, complicated, too many open-ended/free-response questions | [optional] [default to undefined]
+**notes** | **string** | | [optional] [default to '']
+
+## Example
+
+```typescript
+import { ReportTask } from './api';
+
+const instance: ReportTask = {
+ bpuid,
+ reasons,
+ notes,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ReportValue.md b/jb-ui/src/api_fsb/docs/ReportValue.md
new file mode 100644
index 0000000..a9c773d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ReportValue.md
@@ -0,0 +1,23 @@
+# ReportValue
+
+The reason a user reported a task.
+
+## Enum
+
+* `NUMBER_0` (value: `0`)
+
+* `NUMBER_1` (value: `1`)
+
+* `NUMBER_2` (value: `2`)
+
+* `NUMBER_3` (value: `3`)
+
+* `NUMBER_4` (value: `4`)
+
+* `NUMBER_5` (value: `5`)
+
+* `NUMBER_6` (value: `6`)
+
+* `NUMBER_7` (value: `7`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet.md b/jb-ui/src/api_fsb/docs/ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet.md
new file mode 100644
index 0000000..36fab3a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet.md
@@ -0,0 +1,86 @@
+# ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **string** | Name of contest. Can be displayed to user. | [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+**contest_type** | **string** | | [optional] [default to ContestTypeEnum_Milestone]
+**end_condition** | [**MilestoneContestEndCondition**](MilestoneContestEndCondition.md) | | [default to undefined]
+**prizes** | [**Array&lt;ContestPrize&gt;**](ContestPrize.md) | | [optional] [default to undefined]
+**starts_at** | **string** | When the contest starts | [optional] [default to undefined]
+**terms_and_conditions** | **string** | | [optional] [default to undefined]
+**status** | [**ContestStatus**](ContestStatus.md) | | [optional] [default to undefined]
+**country_isos** | **string** | | [optional] [default to undefined]
+**uuid** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | Contest applies only to a single BP | [default to undefined]
+**created_at** | **string** | When this contest was created | [optional] [default to undefined]
+**updated_at** | **string** | When this contest was last modified. Does not include entries being created/modified | [optional] [default to undefined]
+**ended_at** | **string** | | [optional] [default to undefined]
+**end_reason** | [**ContestEndReason**](ContestEndReason.md) | | [optional] [default to undefined]
+**product_user_id** | **string** | | [default to undefined]
+**user_winnings** | [**Array&lt;ContestWinner&gt;**](ContestWinner.md) | The prizes won in this contest by the requested user | [optional] [default to undefined]
+**entry_type** | **string** | | [optional] [default to EntryTypeEnum_Count]
+**entry_rule** | [**ContestEntryRule**](ContestEntryRule.md) | | [optional] [default to undefined]
+**current_amount** | [**CurrentAmount**](CurrentAmount.md) | | [optional] [default to undefined]
+**current_participants** | **number** | Count of unique participants | [optional] [default to 0]
+**user_amount** | **number** | The total amount for this user for this contest | [default to undefined]
+**user_amount_today** | [**UserAmountToday**](UserAmountToday.md) | | [default to undefined]
+**current_win_probability** | **number** | Probability of this user winning 1 or more prizes, if the contestended right now | [readonly] [default to undefined]
+**projected_win_probability** | **number** | | [default to undefined]
+**leaderboard_key** | **string** | The specific leaderboard instance this contest is connected to | [default to undefined]
+**tie_break_strategy** | **string** | | [optional] [default to TieBreakStrategyEnum_SplitPrizePool]
+**country_iso** | **string** | | [readonly] [default to undefined]
+**user_rank** | **number** | | [default to undefined]
+**target_amount** | **number** | Each user \&#39;wins\&#39; (receives prizes) once this target amount is reached. | [default to undefined]
+**entry_trigger** | [**ContestEntryTrigger**](ContestEntryTrigger.md) | | [optional] [default to undefined]
+**valid_for** | **string** | | [optional] [default to undefined]
+**valid_for_event** | **string** | | [optional] [default to undefined]
+**win_count** | **number** | The number of times the milestone has been reached. | [optional] [default to 0]
+
+## Example
+
+```typescript
+import { ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet } from './api';
+
+const instance: ResponseGetContestUserViewProductIdContestContestUuidUserProductUserIdGet = {
+ name,
+ description,
+ contest_type,
+ end_condition,
+ prizes,
+ starts_at,
+ terms_and_conditions,
+ status,
+ country_isos,
+ uuid,
+ product_id,
+ created_at,
+ updated_at,
+ ended_at,
+ end_reason,
+ product_user_id,
+ user_winnings,
+ entry_type,
+ entry_rule,
+ current_amount,
+ current_participants,
+ user_amount,
+ user_amount_today,
+ current_win_probability,
+ projected_win_probability,
+ leaderboard_key,
+ tie_break_strategy,
+ country_iso,
+ user_rank,
+ target_amount,
+ entry_trigger,
+ valid_for,
+ valid_for_event,
+ win_count,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ResponseWebsocketEventsDocsWsEventsDocsGet.md b/jb-ui/src/api_fsb/docs/ResponseWebsocketEventsDocsWsEventsDocsGet.md
new file mode 100644
index 0000000..363292a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ResponseWebsocketEventsDocsWsEventsDocsGet.md
@@ -0,0 +1,28 @@
+# ResponseWebsocketEventsDocsWsEventsDocsGet
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | **string** | | [optional] [default to KindEnum_Pong]
+**timestamp** | **string** | | [optional] [default to undefined]
+**data** | [**StatsSnapshot**](StatsSnapshot.md) | | [default to undefined]
+**country_iso** | **string** | | [optional] [default to undefined]
+**product_id** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { ResponseWebsocketEventsDocsWsEventsDocsGet } from './api';
+
+const instance: ResponseWebsocketEventsDocsWsEventsDocsGet = {
+ kind,
+ timestamp,
+ data,
+ country_iso,
+ product_id,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Scope.md b/jb-ui/src/api_fsb/docs/Scope.md
new file mode 100644
index 0000000..be4ca97
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Scope.md
@@ -0,0 +1,12 @@
+# Scope
+
+
+## Enum
+
+* `Global` (value: `'global'`)
+
+* `Team` (value: `'team'`)
+
+* `Product` (value: `'product'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Selector.md b/jb-ui/src/api_fsb/docs/Selector.md
new file mode 100644
index 0000000..a123850
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Selector.md
@@ -0,0 +1,18 @@
+# Selector
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { Selector } from './api';
+
+const instance: Selector = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SessionAdjustedStatus.md b/jb-ui/src/api_fsb/docs/SessionAdjustedStatus.md
new file mode 100644
index 0000000..0df7434
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SessionAdjustedStatus.md
@@ -0,0 +1,13 @@
+# SessionAdjustedStatus
+
+An adjusted_status is set if a session is adjusted by the marketplace after the original return. A session can be adjusted multiple times. This is the most recent status. If a session was originally a complete, was adjusted to incomplete, then back to complete, the adjusted_status will be None, but the adjusted_timestamp will be set to the most recent change.
+
+## Enum
+
+* `Ac` (value: `'ac'`)
+
+* `Af` (value: `'af'`)
+
+* `Pa` (value: `'pa'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SessionConfig.md b/jb-ui/src/api_fsb/docs/SessionConfig.md
new file mode 100644
index 0000000..1df61d8
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SessionConfig.md
@@ -0,0 +1,25 @@
+# SessionConfig
+
+Stores configuration related to the Session, a session being a users experience attempting to do work.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**max_session_len** | **number** | The amount of time (in seconds) that a respondent may spend attempting to get into a survey within a session.If NULL, there is no limit. | [optional] [default to 600]
+**max_session_hard_retry** | **number** | The number of surveys that a respondent may attempt within a session before the session is terminated. | [optional] [default to 5]
+**min_payout** | **string** | The minimum amount the user should be paid for a complete. If no payout transformation is defined, the value is based on the BP\&#39;s payout. If a payout transformation is defined, the min_payout is applied on the user\&#39;s payout. Note, this is separate and distinct from the payout transformation\&#39;s min payout. The payout transformation\&#39;s min_payout does not care what the task\&#39;s actual payout was. This min_payout will prevent the user from being show any tasks that would pay below this amount. | [optional] [default to '0.14']
+
+## Example
+
+```typescript
+import { SessionConfig } from './api';
+
+const instance: SessionConfig = {
+ max_session_len,
+ max_session_hard_retry,
+ min_payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SessionEnterPayload.md b/jb-ui/src/api_fsb/docs/SessionEnterPayload.md
new file mode 100644
index 0000000..e70afbb
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SessionEnterPayload.md
@@ -0,0 +1,22 @@
+# SessionEnterPayload
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**event_type** | **string** | | [optional] [default to EventTypeEnum_SessionEnter]
+**country_iso** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { SessionEnterPayload } from './api';
+
+const instance: SessionEnterPayload = {
+ event_type,
+ country_iso,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SessionFinishPayload.md b/jb-ui/src/api_fsb/docs/SessionFinishPayload.md
new file mode 100644
index 0000000..86572b1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SessionFinishPayload.md
@@ -0,0 +1,32 @@
+# SessionFinishPayload
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**event_type** | **string** | | [optional] [default to EventTypeEnum_SessionFinish]
+**country_iso** | **string** | | [default to undefined]
+**duration_sec** | **number** | | [default to undefined]
+**status** | [**Status**](Status.md) | | [default to undefined]
+**status_code_1** | [**StatusCode1**](StatusCode1.md) | | [optional] [default to undefined]
+**status_code_2** | [**SessionStatusCode2**](SessionStatusCode2.md) | | [optional] [default to undefined]
+**user_payout** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { SessionFinishPayload } from './api';
+
+const instance: SessionFinishPayload = {
+ event_type,
+ country_iso,
+ duration_sec,
+ status,
+ status_code_1,
+ status_code_2,
+ user_payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SessionStatusCode2.md b/jb-ui/src/api_fsb/docs/SessionStatusCode2.md
new file mode 100644
index 0000000..a47905a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SessionStatusCode2.md
@@ -0,0 +1,33 @@
+# SessionStatusCode2
+
+__Status Detail__ This should be set if the Session.status_code_1 is SESSION_XXX_FAIL
+
+## Enum
+
+* `NUMBER_1` (value: `1`)
+
+* `NUMBER_2` (value: `2`)
+
+* `NUMBER_3` (value: `3`)
+
+* `NUMBER_4` (value: `4`)
+
+* `NUMBER_5` (value: `5`)
+
+* `NUMBER_6` (value: `6`)
+
+* `NUMBER_7` (value: `7`)
+
+* `NUMBER_8` (value: `8`)
+
+* `NUMBER_9` (value: `9`)
+
+* `NUMBER_10` (value: `10`)
+
+* `NUMBER_11` (value: `11`)
+
+* `NUMBER_12` (value: `12`)
+
+* `NUMBER_13` (value: `13`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ShippingCarrier.md b/jb-ui/src/api_fsb/docs/ShippingCarrier.md
new file mode 100644
index 0000000..4a6bb7f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ShippingCarrier.md
@@ -0,0 +1,14 @@
+# ShippingCarrier
+
+
+## Enum
+
+* `Usps` (value: `'USPS'`)
+
+* `FedEx` (value: `'FedEx'`)
+
+* `Ups` (value: `'UPS'`)
+
+* `Dhl` (value: `'DHL'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ShippingMethod.md b/jb-ui/src/api_fsb/docs/ShippingMethod.md
new file mode 100644
index 0000000..d83a40f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ShippingMethod.md
@@ -0,0 +1,16 @@
+# ShippingMethod
+
+
+## Enum
+
+* `Standard` (value: `'Standard'`)
+
+* `Express` (value: `'Express'`)
+
+* `TwoDay` (value: `'Two-Day'`)
+
+* `Overnight` (value: `'Overnight'`)
+
+* `SameDay` (value: `'Same Day'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SingleEntryBucket.md b/jb-ui/src/api_fsb/docs/SingleEntryBucket.md
new file mode 100644
index 0000000..fa9b6ff
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SingleEntryBucket.md
@@ -0,0 +1,22 @@
+# SingleEntryBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+
+## Example
+
+```typescript
+import { SingleEntryBucket } from './api';
+
+const instance: SingleEntryBucket = {
+ id,
+ uri,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SingleEntryOfferWall.md b/jb-ui/src/api_fsb/docs/SingleEntryOfferWall.md
new file mode 100644
index 0000000..c22a834
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SingleEntryOfferWall.md
@@ -0,0 +1,31 @@
+# SingleEntryOfferWall
+
+Only returns a single bucket with the top scoring tasks. Offerwall code: `5fl8bpv5`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;SingleEntryBucket&gt;**](SingleEntryBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+**payout_format** | **string** | The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout &#x3D; 100 (one dollar). - \&quot;{payout*10:,.0f} Points\&quot; -&gt; \&quot;1,000 Points\&quot; - \&quot;${payout/100:.2f}\&quot; -&gt; \&quot;$1.00\&quot; | [default to undefined]
+
+## Example
+
+```typescript
+import { SingleEntryOfferWall } from './api';
+
+const instance: SingleEntryOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+ payout_format,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SingleEntryOfferWallResponse.md b/jb-ui/src/api_fsb/docs/SingleEntryOfferWallResponse.md
new file mode 100644
index 0000000..01812ae
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SingleEntryOfferWallResponse.md
@@ -0,0 +1,22 @@
+# SingleEntryOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**SingleEntryOfferWall**](SingleEntryOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { SingleEntryOfferWallResponse } from './api';
+
+const instance: SingleEntryOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SoftPairBucket.md b/jb-ui/src/api_fsb/docs/SoftPairBucket.md
new file mode 100644
index 0000000..07278cf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SoftPairBucket.md
@@ -0,0 +1,34 @@
+# SoftPairBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | [**Uri**](Uri.md) | | [default to undefined]
+**category** | [**Array&lt;CategoryAssociation&gt;**](CategoryAssociation.md) | | [optional] [default to undefined]
+**contents** | [**Array&lt;BucketTask&gt;**](BucketTask.md) | | [default to undefined]
+**eligibility** | **string** | | [default to undefined]
+**missing_questions** | **Array&lt;string | null&gt;** | | [optional] [default to undefined]
+**loi** | **number** | this is the max loi of the contents | [default to undefined]
+**payout** | **number** | this is the min payout of the contents | [default to undefined]
+
+## Example
+
+```typescript
+import { SoftPairBucket } from './api';
+
+const instance: SoftPairBucket = {
+ id,
+ uri,
+ category,
+ contents,
+ eligibility,
+ missing_questions,
+ loi,
+ payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SoftPairOfferwall.md b/jb-ui/src/api_fsb/docs/SoftPairOfferwall.md
new file mode 100644
index 0000000..e2a5319
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SoftPairOfferwall.md
@@ -0,0 +1,31 @@
+# SoftPairOfferwall
+
+This offerwall contains tasks for which the user has a conditional eligibility. The questions that a user must answer to determine the eligibility are included within each bucket. Additionally, the question definitions are included for convenience. Offerwall code: `37d1da64`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;SoftPairBucket&gt;**](SoftPairBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+**question_info** | [**{ [key: string]: UpkQuestion; }**](UpkQuestion.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { SoftPairOfferwall } from './api';
+
+const instance: SoftPairOfferwall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+ question_info,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SoftPairOfferwallResponse.md b/jb-ui/src/api_fsb/docs/SoftPairOfferwallResponse.md
new file mode 100644
index 0000000..20e86e8
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SoftPairOfferwallResponse.md
@@ -0,0 +1,22 @@
+# SoftPairOfferwallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**SoftPairOfferwall**](SoftPairOfferwall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { SoftPairOfferwallResponse } from './api';
+
+const instance: SoftPairOfferwallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Source.md b/jb-ui/src/api_fsb/docs/Source.md
new file mode 100644
index 0000000..b715bfc
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Source.md
@@ -0,0 +1,48 @@
+# Source
+
+
+## Enum
+
+* `G` (value: `'g'`)
+
+* `C` (value: `'c'`)
+
+* `A` (value: `'a'`)
+
+* `D` (value: `'d'`)
+
+* `Et` (value: `'et'`)
+
+* `F` (value: `'f'`)
+
+* `I` (value: `'i'`)
+
+* `L` (value: `'l'`)
+
+* `M` (value: `'m'`)
+
+* `N` (value: `'n'`)
+
+* `O` (value: `'o'`)
+
+* `E` (value: `'e'`)
+
+* `R` (value: `'r'`)
+
+* `Pr` (value: `'pr'`)
+
+* `P` (value: `'p'`)
+
+* `Rd` (value: `'rd'`)
+
+* `H` (value: `'h'`)
+
+* `S` (value: `'s'`)
+
+* `T` (value: `'t'`)
+
+* `U` (value: `'u'`)
+
+* `W` (value: `'w'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SourceConfig.md b/jb-ui/src/api_fsb/docs/SourceConfig.md
new file mode 100644
index 0000000..6ce0707
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SourceConfig.md
@@ -0,0 +1,35 @@
+# SourceConfig
+
+This could also be named \"BP:Marketplace Config\", as it describes the config for a BP on a single marketplace.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | [**Source**](Source.md) | | [default to undefined]
+**active** | **boolean** | | [optional] [default to true]
+**banned_countries** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**allow_mobile_ip** | **boolean** | | [optional] [default to true]
+**allow_pii_only_buyers** | **boolean** | Allow Tasks from Buyers that want traffic that comes from Suppliers that can identify their users. Only supported on Pure Spectrum. | [optional] [default to false]
+**allow_unhashed_buyers** | **boolean** | Return Tasks from Buyers that don\&#39;t have URL hashing enabled. Only supported on Pure Spectrum. | [optional] [default to false]
+**withhold_profiling** | **boolean** | For some Products, we may have privacy agreements prohibiting us from sharing information with the inventorySource. If True, don\&#39;t add MRPQ (Market Research ProfilingQuestion) onto the entry link. | [optional] [default to false]
+**pass_unconditional_eligible_unknowns** | **boolean** | Not used at the moment | [optional] [default to true]
+
+## Example
+
+```typescript
+import { SourceConfig } from './api';
+
+const instance: SourceConfig = {
+ name,
+ active,
+ banned_countries,
+ allow_mobile_ip,
+ allow_pii_only_buyers,
+ allow_unhashed_buyers,
+ withhold_profiling,
+ pass_unconditional_eligible_unknowns,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SourcesConfig.md b/jb-ui/src/api_fsb/docs/SourcesConfig.md
new file mode 100644
index 0000000..9622fff
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SourcesConfig.md
@@ -0,0 +1,22 @@
+# SourcesConfig
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**user_defined** | [**Array&lt;SourceConfig&gt;**](SourceConfig.md) | | [optional] [default to undefined]
+**policies** | [**Array&lt;SupplyPolicy&gt;**](SupplyPolicy.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { SourcesConfig } from './api';
+
+const instance: SourcesConfig = {
+ user_defined,
+ policies,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StartedAfter.md b/jb-ui/src/api_fsb/docs/StartedAfter.md
new file mode 100644
index 0000000..9424a4b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StartedAfter.md
@@ -0,0 +1,19 @@
+# StartedAfter
+
+Retrieve sessions which were started after this timestamp. If `NULL`, default is 10 days ago.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { StartedAfter } from './api';
+
+const instance: StartedAfter = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StartedBefore.md b/jb-ui/src/api_fsb/docs/StartedBefore.md
new file mode 100644
index 0000000..8fba612
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StartedBefore.md
@@ -0,0 +1,19 @@
+# StartedBefore
+
+Retrieve sessions which were started before this timestamp. If `NULL`, default is now.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { StartedBefore } from './api';
+
+const instance: StartedBefore = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallOfferWall.md b/jb-ui/src/api_fsb/docs/StarwallOfferWall.md
new file mode 100644
index 0000000..eef2276
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallOfferWall.md
@@ -0,0 +1,31 @@
+# StarwallOfferWall
+
+An offerwall with buckets that are clustered by setting as seeds the highest scoring surveys for each bin, then the rest are distributed according to their Euclidean distance using the bucket\'s features. Offerwall code: `b59a2d2b`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNBucket&gt;**](TopNBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+**payout_format** | **string** | The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout &#x3D; 100 (one dollar). - \&quot;{payout*10:,.0f} Points\&quot; -&gt; \&quot;1,000 Points\&quot; - \&quot;${payout/100:.2f}\&quot; -&gt; \&quot;$1.00\&quot; | [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallOfferWall } from './api';
+
+const instance: StarwallOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+ payout_format,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallOfferWallResponse.md b/jb-ui/src/api_fsb/docs/StarwallOfferWallResponse.md
new file mode 100644
index 0000000..68c4f58
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallOfferWallResponse.md
@@ -0,0 +1,22 @@
+# StarwallOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**StarwallOfferWall**](StarwallOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallOfferWallResponse } from './api';
+
+const instance: StarwallOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWall.md b/jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWall.md
new file mode 100644
index 0000000..6f9a4f4
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWall.md
@@ -0,0 +1,29 @@
+# StarwallPlusBlockOfferWall
+
+Same as the StarwallOfferWall, but the buckets include contents and no buckets are returned if the user is blocked. Offerwall code: `7fa1b3f4`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNPlusBucket&gt;**](TopNPlusBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallPlusBlockOfferWall } from './api';
+
+const instance: StarwallPlusBlockOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWallResponse.md b/jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWallResponse.md
new file mode 100644
index 0000000..3716364
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallPlusBlockOfferWallResponse.md
@@ -0,0 +1,22 @@
+# StarwallPlusBlockOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**StarwallPlusBlockOfferWall**](StarwallPlusBlockOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallPlusBlockOfferWallResponse } from './api';
+
+const instance: StarwallPlusBlockOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWall.md b/jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWall.md
new file mode 100644
index 0000000..0781263
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWall.md
@@ -0,0 +1,29 @@
+# StarwallPlusBlockRecontactOfferWall
+
+Same as the StarwallOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a recontact key. Offerwall code: `630db2a4`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNPlusRecontactBucket&gt;**](TopNPlusRecontactBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallPlusBlockRecontactOfferWall } from './api';
+
+const instance: StarwallPlusBlockRecontactOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWallResponse.md b/jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWallResponse.md
new file mode 100644
index 0000000..52467ef
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallPlusBlockRecontactOfferWallResponse.md
@@ -0,0 +1,22 @@
+# StarwallPlusBlockRecontactOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**StarwallPlusBlockRecontactOfferWall**](StarwallPlusBlockRecontactOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallPlusBlockRecontactOfferWallResponse } from './api';
+
+const instance: StarwallPlusBlockRecontactOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallPlusOfferWall.md b/jb-ui/src/api_fsb/docs/StarwallPlusOfferWall.md
new file mode 100644
index 0000000..b5eac96
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallPlusOfferWall.md
@@ -0,0 +1,29 @@
+# StarwallPlusOfferWall
+
+Same as the StarwallOfferWall, but the buckets include contents. Offerwall code: `5481f322`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNPlusBucket&gt;**](TopNPlusBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallPlusOfferWall } from './api';
+
+const instance: StarwallPlusOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StarwallPlusOfferWallResponse.md b/jb-ui/src/api_fsb/docs/StarwallPlusOfferWallResponse.md
new file mode 100644
index 0000000..ad87b7a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StarwallPlusOfferWallResponse.md
@@ -0,0 +1,22 @@
+# StarwallPlusOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**StarwallPlusOfferWall**](StarwallPlusOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { StarwallPlusOfferWallResponse } from './api';
+
+const instance: StarwallPlusOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatisticalSummaryStat.md b/jb-ui/src/api_fsb/docs/StatisticalSummaryStat.md
new file mode 100644
index 0000000..feb5b94
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatisticalSummaryStat.md
@@ -0,0 +1,22 @@
+# StatisticalSummaryStat
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**facet** | [**{ [key: string]: FacetValue; }**](FacetValue.md) | The grouping criteria | [default to undefined]
+**value** | [**StatisticalSummaryValue**](StatisticalSummaryValue.md) | Statistical Summary for the given metric and facet | [default to undefined]
+
+## Example
+
+```typescript
+import { StatisticalSummaryStat } from './api';
+
+const instance: StatisticalSummaryStat = {
+ facet,
+ value,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatisticalSummaryValue.md b/jb-ui/src/api_fsb/docs/StatisticalSummaryValue.md
new file mode 100644
index 0000000..4eeb595
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatisticalSummaryValue.md
@@ -0,0 +1,34 @@
+# StatisticalSummaryValue
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**min** | **number** | | [default to undefined]
+**max** | **number** | | [default to undefined]
+**mean** | **number** | | [default to undefined]
+**q1** | **number** | | [default to undefined]
+**q2** | **number** | equal to the median | [default to undefined]
+**q3** | **number** | | [default to undefined]
+**lower_whisker** | **number** | | [readonly] [default to undefined]
+**upper_whisker** | **number** | | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { StatisticalSummaryValue } from './api';
+
+const instance: StatisticalSummaryValue = {
+ min,
+ max,
+ mean,
+ q1,
+ q2,
+ q3,
+ lower_whisker,
+ upper_whisker,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatsMessage.md b/jb-ui/src/api_fsb/docs/StatsMessage.md
new file mode 100644
index 0000000..92c4a22
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatsMessage.md
@@ -0,0 +1,26 @@
+# StatsMessage
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | **string** | | [optional] [default to KindEnum_Stats]
+**timestamp** | **string** | | [optional] [default to undefined]
+**country_iso** | **string** | | [optional] [default to undefined]
+**data** | [**StatsSnapshot**](StatsSnapshot.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { StatsMessage } from './api';
+
+const instance: StatsMessage = {
+ kind,
+ timestamp,
+ country_iso,
+ data,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatsSnapshot.md b/jb-ui/src/api_fsb/docs/StatsSnapshot.md
new file mode 100644
index 0000000..f041af4
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatsSnapshot.md
@@ -0,0 +1,62 @@
+# StatsSnapshot
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**live_task_count** | [**AggregateBySource**](AggregateBySource.md) | | [optional] [default to undefined]
+**task_created_count_last_1h** | [**AggregateBySource**](AggregateBySource.md) | | [optional] [default to undefined]
+**task_created_count_last_24h** | [**AggregateBySource**](AggregateBySource.md) | | [optional] [default to undefined]
+**live_tasks_max_payout** | [**MaxGaugeBySource**](MaxGaugeBySource.md) | In integer USDCents | [optional] [default to undefined]
+**country_iso** | **string** | | [optional] [default to undefined]
+**timestamp** | **string** | | [optional] [default to undefined]
+**active_users_last_1h** | **number** | Count of users (in this product_id) that were active in the past 60 minutes. Behaviors that trigger active: - Request an offerwall - Enter an offerwall bucket - Request profiling questions - Submit profiling answers - Update user profile | [optional] [default to 0]
+**active_users_last_24h** | **number** | Count of users (in this product_id) that were active in the past 24 hours. | [optional] [default to 0]
+**in_progress_users** | **number** | Count of users that are currently doing work at this moment | [default to undefined]
+**signups_last_24h** | **number** | Count of users created | [default to undefined]
+**session_enters_last_1h** | **number** | | [default to undefined]
+**session_enters_last_24h** | **number** | | [default to undefined]
+**session_fails_last_1h** | **number** | | [default to undefined]
+**session_fails_last_24h** | **number** | | [default to undefined]
+**session_completes_last_1h** | **number** | | [default to undefined]
+**session_completes_last_24h** | **number** | | [default to undefined]
+**sum_payouts_last_1h** | **number** | In integer USDCents | [default to undefined]
+**sum_payouts_last_24h** | **number** | In integer USDCents | [default to undefined]
+**session_avg_payout_last_24h** | **number** | | [default to undefined]
+**session_avg_user_payout_last_24h** | **number** | | [default to undefined]
+**session_fail_avg_loi_last_24h** | **number** | | [default to undefined]
+**session_complete_avg_loi_last_24h** | **number** | | [default to undefined]
+
+## Example
+
+```typescript
+import { StatsSnapshot } from './api';
+
+const instance: StatsSnapshot = {
+ live_task_count,
+ task_created_count_last_1h,
+ task_created_count_last_24h,
+ live_tasks_max_payout,
+ country_iso,
+ timestamp,
+ active_users_last_1h,
+ active_users_last_24h,
+ in_progress_users,
+ signups_last_24h,
+ session_enters_last_1h,
+ session_enters_last_24h,
+ session_fails_last_1h,
+ session_fails_last_24h,
+ session_completes_last_1h,
+ session_completes_last_24h,
+ sum_payouts_last_1h,
+ sum_payouts_last_24h,
+ session_avg_payout_last_24h,
+ session_avg_user_payout_last_24h,
+ session_fail_avg_loi_last_24h,
+ session_complete_avg_loi_last_24h,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Status.md b/jb-ui/src/api_fsb/docs/Status.md
new file mode 100644
index 0000000..52fe6b9
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Status.md
@@ -0,0 +1,15 @@
+# Status
+
+The outcome of a session or wall event. If the session is still in progress, the status will be NULL.
+
+## Enum
+
+* `C` (value: `'c'`)
+
+* `F` (value: `'f'`)
+
+* `A` (value: `'a'`)
+
+* `T` (value: `'t'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatusApi.md b/jb-ui/src/api_fsb/docs/StatusApi.md
new file mode 100644
index 0000000..4ddde8d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatusApi.md
@@ -0,0 +1,155 @@
+# StatusApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**getTaskStatusProductIdStatusTsidGet**](#gettaskstatusproductidstatustsidget) | **GET** /{product_id}/status/{tsid}/ | Get Task Status|
+|[**listTaskStatusesProductIdStatusGet**](#listtaskstatusesproductidstatusget) | **GET** /{product_id}/status/ | List Task Statuses|
+
+# **getTaskStatusProductIdStatusTsidGet**
+> TaskStatusResponse getTaskStatusProductIdStatusTsidGet()
+
+Retrieve the status of a session by a specific Task Status ID (`tsid`) that is provided in the redirect. Given a `tsid`, get back the status of the wall event. This endpoint conflates the idea of a wall event and a session, but for these purposes, the status and payout of the last wall event in a session equals the status and payout for the session.
+
+### Example
+
+```typescript
+import {
+ StatusApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new StatusApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let tsid: string; //A unique identifier for the session (default to undefined)
+
+const { status, data } = await apiInstance.getTaskStatusProductIdStatusTsidGet(
+ productId,
+ tsid
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **tsid** | [**string**] | A unique identifier for the session | defaults to undefined|
+
+
+### Return type
+
+**TaskStatusResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**400** | Bad Request | - |
+|**401** | Unauthorized | - |
+|**500** | Internal Server Error | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **listTaskStatusesProductIdStatusGet**
+> TasksStatusResponse listTaskStatusesProductIdStatusGet()
+
+
+### Example
+
+```typescript
+import {
+ StatusApi,
+ Configuration,
+ StartedAfter,
+ StartedBefore,
+ AdjustedAfter,
+ AdjustedBefore
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new StatusApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user. (optional) (default to undefined)
+let startedAfter: StartedAfter; //Retrieve sessions which were started after this timestamp. If `NULL`, default is 10 days ago. (optional) (default to undefined)
+let startedBefore: StartedBefore; //Retrieve sessions which were started before this timestamp. If `NULL`, default is now. (optional) (default to undefined)
+let status: number; //Filter for sessions with this status. See Task Status for description of status. (optional) (default to undefined)
+let reconciled: boolean; //Only retrieve sessions that have been adjusted. If `reconciled` is True, `adjusted_after` is required. (optional) (default to false)
+let adjustedAfter: AdjustedAfter; //Retrieve sessions which were adjusted after this timestamp. (optional) (default to undefined)
+let adjustedBefore: AdjustedBefore; //Retrieve sessions which were adjusted before this timestamp. Default is now. (optional) (default to undefined)
+let orderBy: string; //Comma-separated fields to order by (optional) (default to '-started')
+let page: number; // (optional) (default to 1)
+let size: number; // (optional) (default to 50)
+
+const { status, data } = await apiInstance.listTaskStatusesProductIdStatusGet(
+ productId,
+ bpuid,
+ startedAfter,
+ startedBefore,
+ status,
+ reconciled,
+ adjustedAfter,
+ adjustedBefore,
+ orderBy,
+ page,
+ size
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user. | (optional) defaults to undefined|
+| **startedAfter** | **StartedAfter** | Retrieve sessions which were started after this timestamp. If &#x60;NULL&#x60;, default is 10 days ago. | (optional) defaults to undefined|
+| **startedBefore** | **StartedBefore** | Retrieve sessions which were started before this timestamp. If &#x60;NULL&#x60;, default is now. | (optional) defaults to undefined|
+| **status** | [**number**] | Filter for sessions with this status. See Task Status for description of status. | (optional) defaults to undefined|
+| **reconciled** | [**boolean**] | Only retrieve sessions that have been adjusted. If &#x60;reconciled&#x60; is True, &#x60;adjusted_after&#x60; is required. | (optional) defaults to false|
+| **adjustedAfter** | **AdjustedAfter** | Retrieve sessions which were adjusted after this timestamp. | (optional) defaults to undefined|
+| **adjustedBefore** | **AdjustedBefore** | Retrieve sessions which were adjusted before this timestamp. Default is now. | (optional) defaults to undefined|
+| **orderBy** | [**string**] | Comma-separated fields to order by | (optional) defaults to '-started'|
+| **page** | [**number**] | | (optional) defaults to 1|
+| **size** | [**number**] | | (optional) defaults to 50|
+
+
+### Return type
+
+**TasksStatusResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**400** | Bad Request | - |
+|**401** | Unauthorized | - |
+|**500** | Internal Server Error | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/StatusCode1.md b/jb-ui/src/api_fsb/docs/StatusCode1.md
new file mode 100644
index 0000000..4b34f57
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatusCode1.md
@@ -0,0 +1,45 @@
+# StatusCode1
+
+__High level status code for outcome of the session.__ This should only be NULL if the Status is ABANDON or TIMEOUT
+
+## Enum
+
+* `NUMBER_1` (value: `1`)
+
+* `NUMBER_2` (value: `2`)
+
+* `NUMBER_3` (value: `3`)
+
+* `NUMBER_4` (value: `4`)
+
+* `NUMBER_5` (value: `5`)
+
+* `NUMBER_6` (value: `6`)
+
+* `NUMBER_7` (value: `7`)
+
+* `NUMBER_8` (value: `8`)
+
+* `NUMBER_9` (value: `9`)
+
+* `NUMBER_10` (value: `10`)
+
+* `NUMBER_11` (value: `11`)
+
+* `NUMBER_12` (value: `12`)
+
+* `NUMBER_13` (value: `13`)
+
+* `NUMBER_14` (value: `14`)
+
+* `NUMBER_15` (value: `15`)
+
+* `NUMBER_16` (value: `16`)
+
+* `NUMBER_17` (value: `17`)
+
+* `NUMBER_18` (value: `18`)
+
+* `NUMBER_19` (value: `19`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatusInfoResponseFail.md b/jb-ui/src/api_fsb/docs/StatusInfoResponseFail.md
new file mode 100644
index 0000000..9f977c3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatusInfoResponseFail.md
@@ -0,0 +1,22 @@
+# StatusInfoResponseFail
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**StatusSuccessFail**](StatusSuccessFail.md) | | [default to undefined]
+**msg** | **string** | An optional message, if success is False | [default to undefined]
+
+## Example
+
+```typescript
+import { StatusInfoResponseFail } from './api';
+
+const instance: StatusInfoResponseFail = {
+ info,
+ msg,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatusResponse.md b/jb-ui/src/api_fsb/docs/StatusResponse.md
new file mode 100644
index 0000000..4a9dd73
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatusResponse.md
@@ -0,0 +1,22 @@
+# StatusResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { StatusResponse } from './api';
+
+const instance: StatusResponse = {
+ status,
+ msg,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatusResponseFailure.md b/jb-ui/src/api_fsb/docs/StatusResponseFailure.md
new file mode 100644
index 0000000..1967042
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatusResponseFailure.md
@@ -0,0 +1,22 @@
+# StatusResponseFailure
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | An optional message, if the status is failure. | [default to undefined]
+
+## Example
+
+```typescript
+import { StatusResponseFailure } from './api';
+
+const instance: StatusResponseFailure = {
+ status,
+ msg,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StatusSuccessFail.md b/jb-ui/src/api_fsb/docs/StatusSuccessFail.md
new file mode 100644
index 0000000..562f7e6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StatusSuccessFail.md
@@ -0,0 +1,20 @@
+# StatusSuccessFail
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**success** | **boolean** | Whether the API response is successful. | [optional] [default to false]
+
+## Example
+
+```typescript
+import { StatusSuccessFail } from './api';
+
+const instance: StatusSuccessFail = {
+ success,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StreakFulfillment.md b/jb-ui/src/api_fsb/docs/StreakFulfillment.md
new file mode 100644
index 0000000..95fd01b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StreakFulfillment.md
@@ -0,0 +1,11 @@
+# StreakFulfillment
+
+What has to happen for a user to fulfill a period for a streak
+
+## Enum
+
+* `Active` (value: `'active'`)
+
+* `Complete` (value: `'complete'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StreakPeriod.md b/jb-ui/src/api_fsb/docs/StreakPeriod.md
new file mode 100644
index 0000000..6fc98a1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StreakPeriod.md
@@ -0,0 +1,12 @@
+# StreakPeriod
+
+
+## Enum
+
+* `Day` (value: `'day'`)
+
+* `Week` (value: `'week'`)
+
+* `Month` (value: `'month'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StreakState.md b/jb-ui/src/api_fsb/docs/StreakState.md
new file mode 100644
index 0000000..68c0e6d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StreakState.md
@@ -0,0 +1,12 @@
+# StreakState
+
+
+## Enum
+
+* `Active` (value: `'active'`)
+
+* `AtRisk` (value: `'at_risk'`)
+
+* `Broken` (value: `'broken'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/StreamsApi.md b/jb-ui/src/api_fsb/docs/StreamsApi.md
new file mode 100644
index 0000000..77826e6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/StreamsApi.md
@@ -0,0 +1,104 @@
+# StreamsApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**websocketDebugPageWsDebugGet**](#websocketdebugpagewsdebugget) | **GET** /ws/debug/ | Websocket Debug Page|
+|[**websocketEventsDocsWsEventsDocsGet**](#websocketeventsdocswseventsdocsget) | **GET** /ws/events/docs/ | Websocket Events Docs|
+
+# **websocketDebugPageWsDebugGet**
+> string websocketDebugPageWsDebugGet()
+
+
+### Example
+
+```typescript
+import {
+ StreamsApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new StreamsApi(configuration);
+
+let productId: string; // (default to undefined)
+
+const { status, data } = await apiInstance.websocketDebugPageWsDebugGet(
+ productId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | | defaults to undefined|
+
+
+### Return type
+
+**string**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: text/html, application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **websocketEventsDocsWsEventsDocsGet**
+> ResponseWebsocketEventsDocsWsEventsDocsGet websocketEventsDocsWsEventsDocsGet()
+
+WebSocket endpoint: `/ws/events/` Protocol: - Client connects - Client sends a SubscribeMessage `{ kind: \"subscribe\", product_id: \"{product_id}\" }` - Server sends a PingMessage `{ kind: \"ping\" }` - Client must reply a PongMessage: `{ kind: \"pong\" }` - Other messages are EventMessage or StatsMessage Close on missing pong after 20s.
+
+### Example
+
+```typescript
+import {
+ StreamsApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new StreamsApi(configuration);
+
+const { status, data } = await apiInstance.websocketEventsDocsWsEventsDocsGet();
+```
+
+### Parameters
+This endpoint does not have any parameters.
+
+
+### Return type
+
+**ResponseWebsocketEventsDocsWsEventsDocsGet**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/SubscribeMessage.md b/jb-ui/src/api_fsb/docs/SubscribeMessage.md
new file mode 100644
index 0000000..42ba908
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SubscribeMessage.md
@@ -0,0 +1,22 @@
+# SubscribeMessage
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**kind** | **string** | | [optional] [default to KindEnum_Subscribe]
+**product_id** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { SubscribeMessage } from './api';
+
+const instance: SubscribeMessage = {
+ kind,
+ product_id,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SupplierTag.md b/jb-ui/src/api_fsb/docs/SupplierTag.md
new file mode 100644
index 0000000..85133bc
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SupplierTag.md
@@ -0,0 +1,21 @@
+# SupplierTag
+
+Available tags which can be used to annotate supplier traffic Note: should not include commas!
+
+## Enum
+
+* `Mobile` (value: `'mobile'`)
+
+* `JsOfferwall` (value: `'js-offerwall'`)
+
+* `DoubleOptIn` (value: `'double-opt-in'`)
+
+* `SingleSignOn` (value: `'single-sign-on'`)
+
+* `PhoneNumberVerified` (value: `'phone-number-verified'`)
+
+* `TestA` (value: `'test-a'`)
+
+* `TestB` (value: `'test-b'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SupplyConfig.md b/jb-ui/src/api_fsb/docs/SupplyConfig.md
new file mode 100644
index 0000000..8323b70
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SupplyConfig.md
@@ -0,0 +1,21 @@
+# SupplyConfig
+
+Describes the set of policies for how GRL can interact with marketplaces. This is only used on the special \"global product\".
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**policies** | [**Array&lt;SupplyPolicy&gt;**](SupplyPolicy.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { SupplyConfig } from './api';
+
+const instance: SupplyConfig = {
+ policies,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SupplyPolicy.md b/jb-ui/src/api_fsb/docs/SupplyPolicy.md
new file mode 100644
index 0000000..6d72fa9
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SupplyPolicy.md
@@ -0,0 +1,51 @@
+# SupplyPolicy
+
+One policy describing how GRL can interact with a marketplaces in a certain way. This is only used on the special \"global product\", and then internally in grpc logic.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | [**Source**](Source.md) | | [default to undefined]
+**active** | **boolean** | | [optional] [default to true]
+**banned_countries** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**allow_mobile_ip** | **boolean** | | [optional] [default to true]
+**allow_pii_only_buyers** | **boolean** | Allow Tasks from Buyers that want traffic that comes from Suppliers that can identify their users. Only supported on Pure Spectrum. | [optional] [default to false]
+**allow_unhashed_buyers** | **boolean** | Return Tasks from Buyers that don\&#39;t have URL hashing enabled. Only supported on Pure Spectrum. | [optional] [default to false]
+**withhold_profiling** | **boolean** | For some Products, we may have privacy agreements prohibiting us from sharing information with the inventorySource. If True, don\&#39;t add MRPQ (Market Research ProfilingQuestion) onto the entry link. | [optional] [default to false]
+**pass_unconditional_eligible_unknowns** | **boolean** | Not used at the moment | [optional] [default to true]
+**address** | **Array&lt;string&gt;** | address for the grpc GetOpps call | [default to undefined]
+**allow_vpn** | **boolean** | | [optional] [default to false]
+**distribute_harmonizer_active** | **boolean** | | [optional] [default to true]
+**supplier_id** | **string** | | [optional] [default to undefined]
+**team_ids** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**product_ids** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**integration_mode** | [**IntegrationMode**](IntegrationMode.md) | | [optional] [default to undefined]
+**scope** | [**Scope**](Scope.md) | There must be only 1 GLOBAL config per Source. We can have more than one TEAM/PRODUCT config per Source. | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { SupplyPolicy } from './api';
+
+const instance: SupplyPolicy = {
+ name,
+ active,
+ banned_countries,
+ allow_mobile_ip,
+ allow_pii_only_buyers,
+ allow_unhashed_buyers,
+ withhold_profiling,
+ pass_unconditional_eligible_unknowns,
+ address,
+ allow_vpn,
+ distribute_harmonizer_active,
+ supplier_id,
+ team_ids,
+ product_ids,
+ integration_mode,
+ scope,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SurveyEligibilityCriterion.md b/jb-ui/src/api_fsb/docs/SurveyEligibilityCriterion.md
new file mode 100644
index 0000000..167e557
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SurveyEligibilityCriterion.md
@@ -0,0 +1,33 @@
+# SurveyEligibilityCriterion
+
+Explanatory record of which question answers contributed to a user\'s eligibility for a survey. This is INSUFFICIENT for determining eligibility to a task as it IGNORES logical operators, dependencies between criteria, and other requirements. It is only intended for the UI.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**question_id** | **string** | | [default to undefined]
+**property_code** | **string** | | [default to undefined]
+**question_text** | **string** | | [default to undefined]
+**qualifying_answer** | **Array&lt;string&gt;** | User answer(s) that satisfied at least one eligibility rule | [default to undefined]
+**qualifying_answer_label** | **Array&lt;string&gt;** | | [default to undefined]
+**explanation** | **string** | | [optional] [default to undefined]
+**rank** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { SurveyEligibilityCriterion } from './api';
+
+const instance: SurveyEligibilityCriterion = {
+ question_id,
+ property_code,
+ question_text,
+ qualifying_answer,
+ qualifying_answer_label,
+ explanation,
+ rank,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/SurveyId.md b/jb-ui/src/api_fsb/docs/SurveyId.md
new file mode 100644
index 0000000..ecd95c6
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/SurveyId.md
@@ -0,0 +1,18 @@
+# SurveyId
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { SurveyId } from './api';
+
+const instance: SurveyId = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TangoCashoutMethodData.md b/jb-ui/src/api_fsb/docs/TangoCashoutMethodData.md
new file mode 100644
index 0000000..50766ff
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TangoCashoutMethodData.md
@@ -0,0 +1,30 @@
+# TangoCashoutMethodData
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**type** | **string** | | [optional] [default to TypeEnum_Tango]
+**utid** | **string** | tango utid | [default to undefined]
+**countries** | **Array&lt;string&gt;** | | [default to undefined]
+**value_type** | **string** | | [default to undefined]
+**disclaimer** | **string** | | [optional] [default to '']
+**terms** | **string** | | [optional] [default to '']
+
+## Example
+
+```typescript
+import { TangoCashoutMethodData } from './api';
+
+const instance: TangoCashoutMethodData = {
+ type,
+ utid,
+ countries,
+ value_type,
+ disclaimer,
+ terms,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TaskEnterPayload.md b/jb-ui/src/api_fsb/docs/TaskEnterPayload.md
new file mode 100644
index 0000000..00927a7
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TaskEnterPayload.md
@@ -0,0 +1,28 @@
+# TaskEnterPayload
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**event_type** | **string** | | [optional] [default to EventTypeEnum_TaskEnter]
+**source** | [**Source**](Source.md) | | [default to undefined]
+**survey_id** | **string** | | [default to undefined]
+**quota_id** | **string** | | [optional] [default to undefined]
+**country_iso** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { TaskEnterPayload } from './api';
+
+const instance: TaskEnterPayload = {
+ event_type,
+ source,
+ survey_id,
+ quota_id,
+ country_iso,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TaskFinishPayload.md b/jb-ui/src/api_fsb/docs/TaskFinishPayload.md
new file mode 100644
index 0000000..5ed04d2
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TaskFinishPayload.md
@@ -0,0 +1,38 @@
+# TaskFinishPayload
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**event_type** | **string** | | [optional] [default to EventTypeEnum_TaskFinish]
+**source** | [**Source**](Source.md) | | [default to undefined]
+**survey_id** | **string** | | [default to undefined]
+**quota_id** | **string** | | [optional] [default to undefined]
+**country_iso** | **string** | | [default to undefined]
+**duration_sec** | **number** | | [default to undefined]
+**status** | [**Status**](Status.md) | | [default to undefined]
+**status_code_1** | [**StatusCode1**](StatusCode1.md) | | [optional] [default to undefined]
+**status_code_2** | [**WallStatusCode2**](WallStatusCode2.md) | | [optional] [default to undefined]
+**cpi** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { TaskFinishPayload } from './api';
+
+const instance: TaskFinishPayload = {
+ event_type,
+ source,
+ survey_id,
+ quota_id,
+ country_iso,
+ duration_sec,
+ status,
+ status_code_1,
+ status_code_2,
+ cpi,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TaskStatusResponse.md b/jb-ui/src/api_fsb/docs/TaskStatusResponse.md
new file mode 100644
index 0000000..68baace
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TaskStatusResponse.md
@@ -0,0 +1,63 @@
+# TaskStatusResponse
+
+The status of a session
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**tsid** | **string** | A unique identifier for the session | [default to undefined]
+**product_id** | **string** | The BP ID of the associated respondent | [default to undefined]
+**product_user_id** | **string** | A unique identifier for each user, which is set by the Supplier | [default to undefined]
+**started** | **string** | When the session was started | [default to undefined]
+**finished** | **string** | | [optional] [default to undefined]
+**status** | **number** | The outcome of a session. - 0 - UNKNOWN - 1 - ENTER (the user has not yet returned) - 2 - INCOMPLETE (the user failed) - 3 - COMPLETE (the user completed the task) | [optional] [default to undefined]
+**payout** | **number** | | [optional] [default to undefined]
+**user_payout** | **number** | | [optional] [default to undefined]
+**payout_format** | **string** | | [optional] [default to undefined]
+**user_payout_string** | **string** | | [optional] [default to undefined]
+**kwargs** | **{ [key: string]: string; }** | Any extra url params used in the offerwall request will be passed back here | [optional] [default to undefined]
+**status_code_1** | **string** | | [optional] [default to undefined]
+**status_code_2** | **string** | | [optional] [default to undefined]
+**adjusted_status** | [**SessionAdjustedStatus**](SessionAdjustedStatus.md) | | [optional] [default to undefined]
+**adjusted_timestamp** | **string** | | [optional] [default to undefined]
+**adjusted_payout** | **number** | | [optional] [default to undefined]
+**adjusted_user_payout** | **number** | | [optional] [default to undefined]
+**adjusted_user_payout_string** | **string** | | [optional] [default to undefined]
+**wall_events** | [**Array&lt;WallOut&gt;**](WallOut.md) | | [optional] [default to undefined]
+**currency** | **string** | | [optional] [default to CurrencyEnum_Usd]
+**final_status** | **number** | This is deprecated | [optional] [default to 0]
+**bpuid** | **string** | | [readonly] [default to undefined]
+
+## Example
+
+```typescript
+import { TaskStatusResponse } from './api';
+
+const instance: TaskStatusResponse = {
+ tsid,
+ product_id,
+ product_user_id,
+ started,
+ finished,
+ status,
+ payout,
+ user_payout,
+ payout_format,
+ user_payout_string,
+ kwargs,
+ status_code_1,
+ status_code_2,
+ adjusted_status,
+ adjusted_timestamp,
+ adjusted_payout,
+ adjusted_user_payout,
+ adjusted_user_payout_string,
+ wall_events,
+ currency,
+ final_status,
+ bpuid,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TasksStatusResponse.md b/jb-ui/src/api_fsb/docs/TasksStatusResponse.md
new file mode 100644
index 0000000..2d38b93
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TasksStatusResponse.md
@@ -0,0 +1,28 @@
+# TasksStatusResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**page** | **number** | Page number | [optional] [default to 1]
+**size** | **number** | Page size | [optional] [default to 50]
+**total** | **number** | | [optional] [default to undefined]
+**tasks_status** | [**Array&lt;TaskStatusResponse&gt;**](TaskStatusResponse.md) | | [optional] [default to undefined]
+**pages** | **number** | | [default to undefined]
+
+## Example
+
+```typescript
+import { TasksStatusResponse } from './api';
+
+const instance: TasksStatusResponse = {
+ page,
+ size,
+ total,
+ tasks_status,
+ pages,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNBucket.md b/jb-ui/src/api_fsb/docs/TopNBucket.md
new file mode 100644
index 0000000..e65619b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNBucket.md
@@ -0,0 +1,38 @@
+# TopNBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+**x** | **number** | For UI. Provides a dimensionality position for the bucket on the x-axis. | [optional] [default to 0]
+**y** | **number** | For UI. Provides a dimensionality position for the bucket on the y-axis. | [optional] [default to 0]
+**name** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**description** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**category** | [**Array&lt;CategoryAssociation&gt;**](CategoryAssociation.md) | | [optional] [default to undefined]
+**duration** | [**DurationSummary**](DurationSummary.md) | | [default to undefined]
+**payout** | [**PayoutSummary**](PayoutSummary.md) | | [default to undefined]
+**quality_score** | **number** | A proprietary score to determine the overall quality of the tasks that are within the bucket. Higher is better. | [default to undefined]
+
+## Example
+
+```typescript
+import { TopNBucket } from './api';
+
+const instance: TopNBucket = {
+ id,
+ uri,
+ x,
+ y,
+ name,
+ description,
+ category,
+ duration,
+ payout,
+ quality_score,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNOfferWall.md b/jb-ui/src/api_fsb/docs/TopNOfferWall.md
new file mode 100644
index 0000000..5652aa0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNOfferWall.md
@@ -0,0 +1,31 @@
+# TopNOfferWall
+
+An offerwall with buckets that are clustered by the `split_by` argument using KMeans clustering. Offerwall code: `45b7228a7`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNBucket&gt;**](TopNBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+**payout_format** | **string** | The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout &#x3D; 100 (one dollar). - \&quot;{payout*10:,.0f} Points\&quot; -&gt; \&quot;1,000 Points\&quot; - \&quot;${payout/100:.2f}\&quot; -&gt; \&quot;$1.00\&quot; | [default to undefined]
+
+## Example
+
+```typescript
+import { TopNOfferWall } from './api';
+
+const instance: TopNOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+ payout_format,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNOfferWallResponse.md b/jb-ui/src/api_fsb/docs/TopNOfferWallResponse.md
new file mode 100644
index 0000000..3d20278
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNOfferWallResponse.md
@@ -0,0 +1,22 @@
+# TopNOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**TopNOfferWall**](TopNOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { TopNOfferWallResponse } from './api';
+
+const instance: TopNOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWall.md b/jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWall.md
new file mode 100644
index 0000000..a99b19e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWall.md
@@ -0,0 +1,29 @@
+# TopNPlusBlockOfferWall
+
+Same as the TopNOfferWall, but the buckets include contents and no buckets are returned if the user is blocked. Offerwall code: `d48cce47`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNPlusBucket&gt;**](TopNPlusBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusBlockOfferWall } from './api';
+
+const instance: TopNPlusBlockOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWallResponse.md b/jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWallResponse.md
new file mode 100644
index 0000000..12d1273
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusBlockOfferWallResponse.md
@@ -0,0 +1,22 @@
+# TopNPlusBlockOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**TopNPlusBlockOfferWall**](TopNPlusBlockOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusBlockOfferWallResponse } from './api';
+
+const instance: TopNPlusBlockOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWall.md b/jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWall.md
new file mode 100644
index 0000000..7931c6f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWall.md
@@ -0,0 +1,29 @@
+# TopNPlusBlockRecontactOfferWall
+
+Same as the TopNOfferWall, but the buckets include contents, no buckets are returned if the user is blocked, and each bucket includes a `is_recontact` key. Offerwall code: `1e5f0af8`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNPlusRecontactBucket&gt;**](TopNPlusRecontactBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusBlockRecontactOfferWall } from './api';
+
+const instance: TopNPlusBlockRecontactOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWallResponse.md b/jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWallResponse.md
new file mode 100644
index 0000000..39ecc4f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusBlockRecontactOfferWallResponse.md
@@ -0,0 +1,22 @@
+# TopNPlusBlockRecontactOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**TopNPlusBlockRecontactOfferWall**](TopNPlusBlockRecontactOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusBlockRecontactOfferWallResponse } from './api';
+
+const instance: TopNPlusBlockRecontactOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusBucket.md b/jb-ui/src/api_fsb/docs/TopNPlusBucket.md
new file mode 100644
index 0000000..a50e140
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusBucket.md
@@ -0,0 +1,46 @@
+# TopNPlusBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+**x** | **number** | For UI. Provides a dimensionality position for the bucket on the x-axis. | [optional] [default to 0]
+**y** | **number** | For UI. Provides a dimensionality position for the bucket on the y-axis. | [optional] [default to 0]
+**name** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**description** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**category** | [**Array&lt;CategoryAssociation&gt;**](CategoryAssociation.md) | | [optional] [default to undefined]
+**contents** | [**Array&lt;BucketTask&gt;**](BucketTask.md) | | [default to undefined]
+**duration** | [**DurationSummary**](DurationSummary.md) | | [default to undefined]
+**payout** | [**PayoutSummary**](PayoutSummary.md) | | [default to undefined]
+**quality_score** | **number** | | [default to undefined]
+**currency** | **string** | This will always be \&#39;USD\&#39; | [optional] [default to 'USD']
+**eligibility_criteria** | [**Array&lt;SurveyEligibilityCriterion&gt;**](SurveyEligibilityCriterion.md) | The reasons the user is eligible for tasks in this bucket | [optional] [default to undefined]
+**eligibility_explanation** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusBucket } from './api';
+
+const instance: TopNPlusBucket = {
+ id,
+ uri,
+ x,
+ y,
+ name,
+ description,
+ category,
+ contents,
+ duration,
+ payout,
+ quality_score,
+ currency,
+ eligibility_criteria,
+ eligibility_explanation,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusOfferWall.md b/jb-ui/src/api_fsb/docs/TopNPlusOfferWall.md
new file mode 100644
index 0000000..6514ef0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusOfferWall.md
@@ -0,0 +1,29 @@
+# TopNPlusOfferWall
+
+Same as the TopNOfferWall, but the buckets include contents. Offerwall code: `b145b803`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;TopNPlusBucket&gt;**](TopNPlusBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusOfferWall } from './api';
+
+const instance: TopNPlusOfferWall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusOfferWallResponse.md b/jb-ui/src/api_fsb/docs/TopNPlusOfferWallResponse.md
new file mode 100644
index 0000000..f14a777
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusOfferWallResponse.md
@@ -0,0 +1,22 @@
+# TopNPlusOfferWallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**TopNPlusOfferWall**](TopNPlusOfferWall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { TopNPlusOfferWallResponse } from './api';
+
+const instance: TopNPlusOfferWallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/TopNPlusRecontactBucket.md b/jb-ui/src/api_fsb/docs/TopNPlusRecontactBucket.md
new file mode 100644
index 0000000..ec392a7
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/TopNPlusRecontactBucket.md
@@ -0,0 +1,44 @@
+# TopNPlusRecontactBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+**x** | **number** | For UI. Provides a dimensionality position for the bucket on the x-axis. | [optional] [default to 0]
+**y** | **number** | For UI. Provides a dimensionality position for the bucket on the y-axis. | [optional] [default to 0]
+**name** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**description** | **string** | Currently unused. Will always return empty string | [optional] [default to '']
+**category** | [**Array&lt;CategoryAssociation&gt;**](CategoryAssociation.md) | | [optional] [default to undefined]
+**contents** | [**Array&lt;BucketTask&gt;**](BucketTask.md) | | [default to undefined]
+**duration** | [**DurationSummary**](DurationSummary.md) | | [default to undefined]
+**payout** | [**PayoutSummary**](PayoutSummary.md) | | [default to undefined]
+**quality_score** | **number** | | [default to undefined]
+**is_recontact** | **boolean** | | [default to undefined]
+**currency** | **string** | This will always be \&#39;USD\&#39; | [optional] [default to 'USD']
+
+## Example
+
+```typescript
+import { TopNPlusRecontactBucket } from './api';
+
+const instance: TopNPlusRecontactBucket = {
+ id,
+ uri,
+ x,
+ y,
+ name,
+ description,
+ category,
+ contents,
+ duration,
+ payout,
+ quality_score,
+ is_recontact,
+ currency,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UPKImportance.md b/jb-ui/src/api_fsb/docs/UPKImportance.md
new file mode 100644
index 0000000..1d2e583
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UPKImportance.md
@@ -0,0 +1,24 @@
+# UPKImportance
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**task_count** | **number** | | [optional] [default to undefined]
+**task_score** | **number** | | [optional] [default to undefined]
+**marketplace_task_count** | **{ [key: string]: number; }** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UPKImportance } from './api';
+
+const instance: UPKImportance = {
+ task_count,
+ task_score,
+ marketplace_task_count,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/USDeliveryAddress.md b/jb-ui/src/api_fsb/docs/USDeliveryAddress.md
new file mode 100644
index 0000000..02963a0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/USDeliveryAddress.md
@@ -0,0 +1,34 @@
+# USDeliveryAddress
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name_or_attn** | **string** | | [default to undefined]
+**company** | **string** | | [optional] [default to undefined]
+**phone_number** | **string** | | [optional] [default to undefined]
+**address** | **string** | | [default to undefined]
+**city** | **string** | | [default to undefined]
+**state** | **string** | | [default to undefined]
+**postal_code** | **string** | | [default to undefined]
+**country** | **string** | | [optional] [default to 'us']
+
+## Example
+
+```typescript
+import { USDeliveryAddress } from './api';
+
+const instance: USDeliveryAddress = {
+ name_or_attn,
+ company,
+ phone_number,
+ address,
+ city,
+ state,
+ postal_code,
+ country,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkItem.md b/jb-ui/src/api_fsb/docs/UpkItem.md
new file mode 100644
index 0000000..ee6f1ae
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkItem.md
@@ -0,0 +1,24 @@
+# UpkItem
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | | [default to undefined]
+**label** | **string** | | [default to undefined]
+**description** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkItem } from './api';
+
+const instance: UpkItem = {
+ id,
+ label,
+ description,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkProperty.md b/jb-ui/src/api_fsb/docs/UpkProperty.md
new file mode 100644
index 0000000..8ab4b6e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkProperty.md
@@ -0,0 +1,35 @@
+# UpkProperty
+
+This used to be called \"QuestionInfo\", which is a bad name, as this describes a UPK Property, like \"educational_attainment\", not the question that asks for your education.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**property_id** | **string** | | [default to undefined]
+**property_label** | **string** | | [default to undefined]
+**prop_type** | [**PropertyType**](PropertyType.md) | Allowed values: - __i__ *(UPK_ITEM)*: UserProfileKnowledge Item - __n__ *(UPK_NUMERICAL)*: UserProfileKnowledge Numerical - __x__ *(UPK_TEXT)*: UserProfileKnowledge Text | [optional] [default to undefined]
+**cardinality** | [**Cardinality**](Cardinality.md) | Allowed values: - __*__ *(ZERO_OR_MORE)*: Zero or More - __?__ *(ZERO_OR_ONE)*: Zero or One | [optional] [default to undefined]
+**country_iso** | **string** | | [default to undefined]
+**gold_standard** | **boolean** | A Gold-Standard question has been enumerated for all possible values (per country) as best as possible by GRL,allowing it to be mapped across inventory sources. A property not marked as Gold-Standard may have: 1) marketplace qid associations &amp; 2) category associations, but doesn\&#39;t have a defined \&#39;range\&#39; (list of allowed itemsin a multiple choice question). This is used for exposing a user\&#39;s profiling data &amp; forthe Nudge API. | [optional] [default to false]
+**allowed_items** | [**Array&lt;UpkItem&gt;**](UpkItem.md) | | [optional] [default to undefined]
+**categories** | [**Array&lt;Category&gt;**](Category.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkProperty } from './api';
+
+const instance: UpkProperty = {
+ property_id,
+ property_label,
+ prop_type,
+ cardinality,
+ country_iso,
+ gold_standard,
+ allowed_items,
+ categories,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestion.md b/jb-ui/src/api_fsb/docs/UpkQuestion.md
new file mode 100644
index 0000000..332d09f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestion.md
@@ -0,0 +1,46 @@
+# UpkQuestion
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**question_id** | **string** | | [optional] [default to undefined]
+**ext_question_id** | **string** | | [optional] [default to undefined]
+**question_type** | [**UpkQuestionType**](UpkQuestionType.md) | | [default to undefined]
+**country_iso** | **string** | | [default to undefined]
+**language_iso** | **string** | | [default to undefined]
+**question_text** | **string** | The text shown to respondents | [default to undefined]
+**choices** | [**Array&lt;UpkQuestionChoice&gt;**](UpkQuestionChoice.md) | | [optional] [default to undefined]
+**selector** | [**Selector**](Selector.md) | | [optional] [default to undefined]
+**configuration** | [**UpkQuestionConfiguration**](UpkQuestionConfiguration.md) | | [optional] [default to undefined]
+**validation** | [**UpkQuestionValidation**](UpkQuestionValidation.md) | | [optional] [default to undefined]
+**importance** | [**UPKImportance**](UPKImportance.md) | | [optional] [default to undefined]
+**categories** | [**Array&lt;Category&gt;**](Category.md) | Categories associated with this question | [optional] [default to undefined]
+**explanation_template** | **string** | | [optional] [default to undefined]
+**explanation_fragment_template** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestion } from './api';
+
+const instance: UpkQuestion = {
+ question_id,
+ ext_question_id,
+ question_type,
+ country_iso,
+ language_iso,
+ question_text,
+ choices,
+ selector,
+ configuration,
+ validation,
+ importance,
+ categories,
+ explanation_template,
+ explanation_fragment_template,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionChoice.md b/jb-ui/src/api_fsb/docs/UpkQuestionChoice.md
new file mode 100644
index 0000000..5aae99a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionChoice.md
@@ -0,0 +1,30 @@
+# UpkQuestionChoice
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**choice_id** | **string** | The unique identifier for a response to a qualification | [default to undefined]
+**choice_text** | **string** | The response text shown to respondents | [default to undefined]
+**order** | **number** | | [default to undefined]
+**group** | **number** | | [optional] [default to undefined]
+**exclusive** | **boolean** | If answer is exclusive, it can be the only option selected | [optional] [default to false]
+**importance** | [**UPKImportance**](UPKImportance.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionChoice } from './api';
+
+const instance: UpkQuestionChoice = {
+ choice_id,
+ choice_text,
+ order,
+ group,
+ exclusive,
+ importance,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionChoiceOut.md b/jb-ui/src/api_fsb/docs/UpkQuestionChoiceOut.md
new file mode 100644
index 0000000..5ba523b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionChoiceOut.md
@@ -0,0 +1,30 @@
+# UpkQuestionChoiceOut
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**choice_id** | **string** | The unique identifier for a response to a qualification | [default to undefined]
+**choice_text** | **string** | The response text shown to respondents | [default to undefined]
+**order** | **number** | | [default to undefined]
+**group** | **number** | | [optional] [default to undefined]
+**exclusive** | **boolean** | If answer is exclusive, it can be the only option selected | [optional] [default to false]
+**importance** | [**UPKImportance**](UPKImportance.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionChoiceOut } from './api';
+
+const instance: UpkQuestionChoiceOut = {
+ choice_id,
+ choice_text,
+ order,
+ group,
+ exclusive,
+ importance,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionConfiguration.md b/jb-ui/src/api_fsb/docs/UpkQuestionConfiguration.md
new file mode 100644
index 0000000..ebcd1f0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionConfiguration.md
@@ -0,0 +1,32 @@
+# UpkQuestionConfiguration
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**max_select** | **number** | | [optional] [default to undefined]
+**max_length** | **number** | | [optional] [default to undefined]
+**min_length** | **number** | | [optional] [default to undefined]
+**slider_min** | **number** | | [optional] [default to undefined]
+**slider_max** | **number** | | [optional] [default to undefined]
+**slider_start** | **number** | | [optional] [default to undefined]
+**slider_step** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionConfiguration } from './api';
+
+const instance: UpkQuestionConfiguration = {
+ max_select,
+ max_length,
+ min_length,
+ slider_min,
+ slider_max,
+ slider_start,
+ slider_step,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationMC.md b/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationMC.md
new file mode 100644
index 0000000..2a256ee
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationMC.md
@@ -0,0 +1,20 @@
+# UpkQuestionConfigurationMC
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**max_select** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionConfigurationMC } from './api';
+
+const instance: UpkQuestionConfigurationMC = {
+ max_select,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationSLIDER.md b/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationSLIDER.md
new file mode 100644
index 0000000..4e0102e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationSLIDER.md
@@ -0,0 +1,26 @@
+# UpkQuestionConfigurationSLIDER
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**slider_min** | **number** | | [optional] [default to undefined]
+**slider_max** | **number** | | [optional] [default to undefined]
+**slider_start** | **number** | | [optional] [default to undefined]
+**slider_step** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionConfigurationSLIDER } from './api';
+
+const instance: UpkQuestionConfigurationSLIDER = {
+ slider_min,
+ slider_max,
+ slider_start,
+ slider_step,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationTE.md b/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationTE.md
new file mode 100644
index 0000000..76d3eab
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionConfigurationTE.md
@@ -0,0 +1,22 @@
+# UpkQuestionConfigurationTE
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**max_length** | **number** | | [optional] [default to undefined]
+**min_length** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionConfigurationTE } from './api';
+
+const instance: UpkQuestionConfigurationTE = {
+ max_length,
+ min_length,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionOut.md b/jb-ui/src/api_fsb/docs/UpkQuestionOut.md
new file mode 100644
index 0000000..351ffaf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionOut.md
@@ -0,0 +1,52 @@
+# UpkQuestionOut
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**question_id** | **string** | | [optional] [default to undefined]
+**ext_question_id** | **string** | | [optional] [default to undefined]
+**question_type** | [**UpkQuestionType**](UpkQuestionType.md) | | [default to undefined]
+**country_iso** | **string** | | [default to undefined]
+**language_iso** | **string** | | [default to undefined]
+**question_text** | **string** | The text shown to respondents | [default to undefined]
+**choices** | [**Array&lt;UpkQuestionChoiceOut&gt;**](UpkQuestionChoiceOut.md) | | [optional] [default to undefined]
+**selector** | [**Selector**](Selector.md) | | [optional] [default to undefined]
+**configuration** | [**UpkQuestionConfiguration**](UpkQuestionConfiguration.md) | | [optional] [default to undefined]
+**validation** | [**UpkQuestionValidation**](UpkQuestionValidation.md) | | [optional] [default to undefined]
+**importance** | [**UPKImportance**](UPKImportance.md) | | [optional] [default to undefined]
+**categories** | [**Array&lt;Category&gt;**](Category.md) | Categories associated with this question | [optional] [default to undefined]
+**explanation_template** | **string** | | [optional] [default to undefined]
+**explanation_fragment_template** | **string** | | [optional] [default to undefined]
+**task_count** | **number** | | [optional] [default to undefined]
+**task_score** | **number** | | [optional] [default to undefined]
+**marketplace_task_count** | **{ [key: string]: number; }** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionOut } from './api';
+
+const instance: UpkQuestionOut = {
+ question_id,
+ ext_question_id,
+ question_type,
+ country_iso,
+ language_iso,
+ question_text,
+ choices,
+ selector,
+ configuration,
+ validation,
+ importance,
+ categories,
+ explanation_template,
+ explanation_fragment_template,
+ task_count,
+ task_score,
+ marketplace_task_count,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionResponse.md b/jb-ui/src/api_fsb/docs/UpkQuestionResponse.md
new file mode 100644
index 0000000..455d59f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionResponse.md
@@ -0,0 +1,30 @@
+# UpkQuestionResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**questions** | [**Array&lt;UpkQuestionOut&gt;**](UpkQuestionOut.md) | | [default to undefined]
+**consent_questions** | **Array&lt;object | null&gt;** | For internal use | [optional] [default to undefined]
+**special_questions** | **Array&lt;object | null&gt;** | For internal use | [optional] [default to undefined]
+**count** | **number** | The number of questions returned | [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionResponse } from './api';
+
+const instance: UpkQuestionResponse = {
+ status,
+ msg,
+ questions,
+ consent_questions,
+ special_questions,
+ count,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionSelectorHIDDEN.md b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorHIDDEN.md
new file mode 100644
index 0000000..51ee35d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorHIDDEN.md
@@ -0,0 +1,8 @@
+# UpkQuestionSelectorHIDDEN
+
+
+## Enum
+
+* `Hidden` (value: `'HIDDEN'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionSelectorMC.md b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorMC.md
new file mode 100644
index 0000000..94c72d7
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorMC.md
@@ -0,0 +1,16 @@
+# UpkQuestionSelectorMC
+
+
+## Enum
+
+* `Sa` (value: `'SA'`)
+
+* `Ma` (value: `'MA'`)
+
+* `Dl` (value: `'DL'`)
+
+* `Sb` (value: `'SB'`)
+
+* `Msb` (value: `'MSB'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionSelectorSLIDER.md b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorSLIDER.md
new file mode 100644
index 0000000..cfc5daf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorSLIDER.md
@@ -0,0 +1,10 @@
+# UpkQuestionSelectorSLIDER
+
+
+## Enum
+
+* `Hslider` (value: `'HSLIDER'`)
+
+* `Vslider` (value: `'VSLIDER'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionSelectorTE.md b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorTE.md
new file mode 100644
index 0000000..0efddc9
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionSelectorTE.md
@@ -0,0 +1,12 @@
+# UpkQuestionSelectorTE
+
+
+## Enum
+
+* `Sl` (value: `'SL'`)
+
+* `Ml` (value: `'ML'`)
+
+* `Etb` (value: `'ETB'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionType.md b/jb-ui/src/api_fsb/docs/UpkQuestionType.md
new file mode 100644
index 0000000..784e4eb
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionType.md
@@ -0,0 +1,14 @@
+# UpkQuestionType
+
+
+## Enum
+
+* `Mc` (value: `'MC'`)
+
+* `Te` (value: `'TE'`)
+
+* `Slider` (value: `'SLIDER'`)
+
+* `Hidden` (value: `'HIDDEN'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UpkQuestionValidation.md b/jb-ui/src/api_fsb/docs/UpkQuestionValidation.md
new file mode 100644
index 0000000..d3db1b5
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UpkQuestionValidation.md
@@ -0,0 +1,20 @@
+# UpkQuestionValidation
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**patterns** | [**Array&lt;PatternValidation&gt;**](PatternValidation.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { UpkQuestionValidation } from './api';
+
+const instance: UpkQuestionValidation = {
+ patterns,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/Uri.md b/jb-ui/src/api_fsb/docs/Uri.md
new file mode 100644
index 0000000..e472620
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/Uri.md
@@ -0,0 +1,19 @@
+# Uri
+
+The URL to send a respondent into. Must not edit this URL in any way. If the eligibility is conditional or ineligible, the uri will be null.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { Uri } from './api';
+
+const instance: Uri = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/User.md b/jb-ui/src/api_fsb/docs/User.md
new file mode 100644
index 0000000..702c746
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/User.md
@@ -0,0 +1,40 @@
+# User
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **number** | | [optional] [default to undefined]
+**uuid** | **string** | | [optional] [default to undefined]
+**product** | [**Product**](Product.md) | | [optional] [default to undefined]
+**product_id** | **string** | | [optional] [default to undefined]
+**product_user_id** | **string** | | [optional] [default to undefined]
+**blocked** | **boolean** | | [optional] [default to undefined]
+**created** | **string** | | [optional] [default to undefined]
+**last_seen** | **string** | | [optional] [default to undefined]
+**audit_log** | [**Array&lt;AuditLog&gt;**](AuditLog.md) | | [optional] [default to undefined]
+**transactions** | [**Array&lt;LedgerTransaction&gt;**](LedgerTransaction.md) | | [optional] [default to undefined]
+**location_history** | [**Array&lt;GeoIPInformation&gt;**](GeoIPInformation.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { User } from './api';
+
+const instance: User = {
+ id,
+ uuid,
+ product,
+ product_id,
+ product_user_id,
+ blocked,
+ created,
+ last_seen,
+ audit_log,
+ transactions,
+ location_history,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserAmount.md b/jb-ui/src/api_fsb/docs/UserAmount.md
new file mode 100644
index 0000000..3dbc7db
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserAmount.md
@@ -0,0 +1,19 @@
+# UserAmount
+
+The total amount this user has entered
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { UserAmount } from './api';
+
+const instance: UserAmount = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserAmountToday.md b/jb-ui/src/api_fsb/docs/UserAmountToday.md
new file mode 100644
index 0000000..b2af95a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserAmountToday.md
@@ -0,0 +1,19 @@
+# UserAmountToday
+
+The total amount this user has entered in the past 24 hours
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { UserAmountToday } from './api';
+
+const instance: UserAmountToday = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserCpiString.md b/jb-ui/src/api_fsb/docs/UserCpiString.md
new file mode 100644
index 0000000..5d405c4
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserCpiString.md
@@ -0,0 +1,19 @@
+# UserCpiString
+
+If a payout transformation is configured on this account, this is the amount to display to the user
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { UserCpiString } from './api';
+
+const instance: UserCpiString = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserCreateConfig.md b/jb-ui/src/api_fsb/docs/UserCreateConfig.md
new file mode 100644
index 0000000..ff71db7
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserCreateConfig.md
@@ -0,0 +1,23 @@
+# UserCreateConfig
+
+Stores configuration for the user creation experience. The user creation limit is determined dynamically based on the median daily completion rate. min_hourly_create_limit & max_hourly_create_limit can be used to constrain the dynamically determined rate limit within set values.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**min_hourly_create_limit** | **number** | The smallest allowed value for the hourly user create limit. | [optional] [default to 0]
+**max_hourly_create_limit** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UserCreateConfig } from './api';
+
+const instance: UserCreateConfig = {
+ min_hourly_create_limit,
+ max_hourly_create_limit,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserHealthConfig.md b/jb-ui/src/api_fsb/docs/UserHealthConfig.md
new file mode 100644
index 0000000..3adf304
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserHealthConfig.md
@@ -0,0 +1,22 @@
+# UserHealthConfig
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**banned_countries** | **Array&lt;string&gt;** | | [optional] [default to undefined]
+**allow_ban_iphist** | **boolean** | | [optional] [default to true]
+
+## Example
+
+```typescript
+import { UserHealthConfig } from './api';
+
+const instance: UserHealthConfig = {
+ banned_countries,
+ allow_ban_iphist,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserInfo.md b/jb-ui/src/api_fsb/docs/UserInfo.md
new file mode 100644
index 0000000..3d90334
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserInfo.md
@@ -0,0 +1,22 @@
+# UserInfo
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**user_profile_knowledge** | [**Array&lt;UserProfileKnowledge&gt;**](UserProfileKnowledge.md) | | [optional] [default to undefined]
+**marketplace_profile_knowledge** | [**Array&lt;MarketProfileKnowledge&gt;**](MarketProfileKnowledge.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UserInfo } from './api';
+
+const instance: UserInfo = {
+ user_profile_knowledge,
+ marketplace_profile_knowledge,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserInfoResponse.md b/jb-ui/src/api_fsb/docs/UserInfoResponse.md
new file mode 100644
index 0000000..9185d35
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserInfoResponse.md
@@ -0,0 +1,24 @@
+# UserInfoResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**user_profile** | [**UserInfo**](UserInfo.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserInfoResponse } from './api';
+
+const instance: UserInfoResponse = {
+ status,
+ msg,
+ user_profile,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskAdjustment.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskAdjustment.md
new file mode 100644
index 0000000..a63d22c
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskAdjustment.md
@@ -0,0 +1,34 @@
+# UserLedgerTransactionTaskAdjustment
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**created** | **string** | When the Transaction was created | [default to undefined]
+**description** | **string** | External description suitable for UI | [optional] [default to 'Task Adjustment']
+**amount** | **number** | The net amount affecting the user\&#39;s wallet, in USDCents. Positive means the user\&#39;s balance increased; negative means it decreased. | [default to undefined]
+**balance_after** | **number** | | [optional] [default to undefined]
+**tx_type** | **string** | | [optional] [default to TxTypeEnum_BpAdjustment]
+**tsid** | **string** | A unique identifier for the session | [default to undefined]
+**url** | **string** | | [default to undefined]
+**amount_string** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionTaskAdjustment } from './api';
+
+const instance: UserLedgerTransactionTaskAdjustment = {
+ created,
+ description,
+ amount,
+ balance_after,
+ tx_type,
+ tsid,
+ url,
+ amount_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskComplete.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskComplete.md
new file mode 100644
index 0000000..f513148
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTaskComplete.md
@@ -0,0 +1,35 @@
+# UserLedgerTransactionTaskComplete
+
+In a BP with user wallet enabled, the task-complete transaction would have line items for both the credit to the bp_wallet_account and credit to user_account. This is the user-detail, so we\'ve only caring about the user\'s payment.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**created** | **string** | When the Transaction was created | [default to undefined]
+**description** | **string** | External description suitable for UI | [optional] [default to 'Task Complete']
+**amount** | **number** | The net amount affecting the user\&#39;s wallet, in USDCents. Positive means the user\&#39;s balance increased; negative means it decreased. | [default to undefined]
+**balance_after** | **number** | | [optional] [default to undefined]
+**tx_type** | **string** | | [optional] [default to TxTypeEnum_BpPayment]
+**tsid** | **string** | A unique identifier for the session | [default to undefined]
+**url** | **string** | | [default to undefined]
+**amount_string** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionTaskComplete } from './api';
+
+const instance: UserLedgerTransactionTaskComplete = {
+ created,
+ description,
+ amount,
+ balance_after,
+ tx_type,
+ tsid,
+ url,
+ amount_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionTypeSummary.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTypeSummary.md
new file mode 100644
index 0000000..ca2306f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTypeSummary.md
@@ -0,0 +1,26 @@
+# UserLedgerTransactionTypeSummary
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**entry_count** | **number** | | [optional] [default to 0]
+**min_amount** | **number** | | [optional] [default to undefined]
+**max_amount** | **number** | | [optional] [default to undefined]
+**total_amount** | **number** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionTypeSummary } from './api';
+
+const instance: UserLedgerTransactionTypeSummary = {
+ entry_count,
+ min_amount,
+ max_amount,
+ total_amount,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionTypesSummary.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTypesSummary.md
new file mode 100644
index 0000000..7a946a3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionTypesSummary.md
@@ -0,0 +1,26 @@
+# UserLedgerTransactionTypesSummary
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bp_adjustment** | [**UserLedgerTransactionTypeSummary**](UserLedgerTransactionTypeSummary.md) | | [optional] [default to undefined]
+**bp_payment** | [**UserLedgerTransactionTypeSummary**](UserLedgerTransactionTypeSummary.md) | | [optional] [default to undefined]
+**user_bonus** | [**UserLedgerTransactionTypeSummary**](UserLedgerTransactionTypeSummary.md) | | [optional] [default to undefined]
+**user_payout_request** | [**UserLedgerTransactionTypeSummary**](UserLedgerTransactionTypeSummary.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionTypesSummary } from './api';
+
+const instance: UserLedgerTransactionTypesSummary = {
+ bp_adjustment,
+ bp_payment,
+ user_bonus,
+ user_payout_request,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionUserBonus.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionUserBonus.md
new file mode 100644
index 0000000..d858bf3
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionUserBonus.md
@@ -0,0 +1,32 @@
+# UserLedgerTransactionUserBonus
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**created** | **string** | When the Transaction was created | [default to undefined]
+**description** | **string** | External description suitable for UI | [optional] [default to 'Compensation Bonus']
+**amount** | **number** | The net amount affecting the user\&#39;s wallet, in USDCents. Positive means the user\&#39;s balance increased; negative means it decreased. | [default to undefined]
+**balance_after** | **number** | | [optional] [default to undefined]
+**tx_type** | **string** | | [optional] [default to TxTypeEnum_UserBonus]
+**url** | **string** | | [default to undefined]
+**amount_string** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionUserBonus } from './api';
+
+const instance: UserLedgerTransactionUserBonus = {
+ created,
+ description,
+ amount,
+ balance_after,
+ tx_type,
+ url,
+ amount_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionUserPayout.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionUserPayout.md
new file mode 100644
index 0000000..9c9342e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionUserPayout.md
@@ -0,0 +1,34 @@
+# UserLedgerTransactionUserPayout
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**created** | **string** | When the Transaction was created | [default to undefined]
+**description** | **string** | External description suitable for UI | [default to undefined]
+**amount** | **number** | The net amount affecting the user\&#39;s wallet, in USDCents. Positive means the user\&#39;s balance increased; negative means it decreased. | [default to undefined]
+**balance_after** | **number** | | [optional] [default to undefined]
+**tx_type** | **string** | | [optional] [default to TxTypeEnum_UserPayoutRequest]
+**payout_id** | **string** | A unique identifier for the payout | [default to undefined]
+**url** | **string** | | [default to undefined]
+**amount_string** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionUserPayout } from './api';
+
+const instance: UserLedgerTransactionUserPayout = {
+ created,
+ description,
+ amount,
+ balance_after,
+ tx_type,
+ payout_id,
+ url,
+ amount_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponse.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponse.md
new file mode 100644
index 0000000..52925b0
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponse.md
@@ -0,0 +1,34 @@
+# UserLedgerTransactionsResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**page** | **number** | Page number | [optional] [default to 1]
+**size** | **number** | Page size | [optional] [default to 50]
+**total** | **number** | | [optional] [default to undefined]
+**transactions** | [**Array&lt;UserLedgerTransactionsResponseTransactionsInner&gt;**](UserLedgerTransactionsResponseTransactionsInner.md) | | [optional] [default to undefined]
+**summary** | [**UserLedgerTransactionTypesSummary**](UserLedgerTransactionTypesSummary.md) | | [default to undefined]
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**pages** | **number** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionsResponse } from './api';
+
+const instance: UserLedgerTransactionsResponse = {
+ page,
+ size,
+ total,
+ transactions,
+ summary,
+ status,
+ msg,
+ pages,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponseTransactionsInner.md b/jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponseTransactionsInner.md
new file mode 100644
index 0000000..236b56e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserLedgerTransactionsResponseTransactionsInner.md
@@ -0,0 +1,36 @@
+# UserLedgerTransactionsResponseTransactionsInner
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**created** | **string** | When the Transaction was created | [default to undefined]
+**description** | **string** | External description suitable for UI | [default to 'Task Complete']
+**amount** | **number** | The net amount affecting the user\&#39;s wallet, in USDCents. Positive means the user\&#39;s balance increased; negative means it decreased. | [default to undefined]
+**balance_after** | **number** | | [optional] [default to undefined]
+**tx_type** | **string** | | [optional] [default to TxTypeEnum_BpPayment]
+**payout_id** | **string** | A unique identifier for the payout | [default to undefined]
+**url** | **string** | | [default to undefined]
+**amount_string** | **string** | | [default to undefined]
+**tsid** | **string** | A unique identifier for the session | [default to undefined]
+
+## Example
+
+```typescript
+import { UserLedgerTransactionsResponseTransactionsInner } from './api';
+
+const instance: UserLedgerTransactionsResponseTransactionsInner = {
+ created,
+ description,
+ amount,
+ balance_after,
+ tx_type,
+ payout_id,
+ url,
+ amount_string,
+ tsid,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserProfile.md b/jb-ui/src/api_fsb/docs/UserProfile.md
new file mode 100644
index 0000000..7bacbdf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserProfile.md
@@ -0,0 +1,32 @@
+# UserProfile
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**email_address** | **string** | | [optional] [default to undefined]
+**user** | [**User**](User.md) | | [default to undefined]
+**marketplace_pids** | **{ [key: string]: string; }** | User\&#39;s PID in marketplaces | [optional] [default to undefined]
+**streaks** | [**Array&lt;UserStreak&gt;**](UserStreak.md) | | [optional] [default to undefined]
+**email_md5** | **string** | | [default to undefined]
+**email_sha1** | **string** | | [default to undefined]
+**email_sha256** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserProfile } from './api';
+
+const instance: UserProfile = {
+ email_address,
+ user,
+ marketplace_pids,
+ streaks,
+ email_md5,
+ email_sha1,
+ email_sha256,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserProfileKnowledge.md b/jb-ui/src/api_fsb/docs/UserProfileKnowledge.md
new file mode 100644
index 0000000..1bf2812
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserProfileKnowledge.md
@@ -0,0 +1,28 @@
+# UserProfileKnowledge
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**property_id** | **string** | | [default to undefined]
+**property_label** | **string** | | [default to undefined]
+**translation** | **string** | | [default to undefined]
+**answer** | [**Array&lt;UserProfileKnowledgeAnswer&gt;**](UserProfileKnowledgeAnswer.md) | | [optional] [default to undefined]
+**created** | **string** | When the User submitted this Profiling data | [default to undefined]
+
+## Example
+
+```typescript
+import { UserProfileKnowledge } from './api';
+
+const instance: UserProfileKnowledge = {
+ property_id,
+ property_label,
+ translation,
+ answer,
+ created,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserProfileKnowledgeAnswer.md b/jb-ui/src/api_fsb/docs/UserProfileKnowledgeAnswer.md
new file mode 100644
index 0000000..a88cbe4
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserProfileKnowledgeAnswer.md
@@ -0,0 +1,26 @@
+# UserProfileKnowledgeAnswer
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | | [optional] [default to undefined]
+**label** | **string** | | [optional] [default to undefined]
+**translation** | **string** | | [optional] [default to undefined]
+**value** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UserProfileKnowledgeAnswer } from './api';
+
+const instance: UserProfileKnowledgeAnswer = {
+ id,
+ label,
+ translation,
+ value,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserProfileResponse.md b/jb-ui/src/api_fsb/docs/UserProfileResponse.md
new file mode 100644
index 0000000..af39b22
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserProfileResponse.md
@@ -0,0 +1,24 @@
+# UserProfileResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**user_profile** | [**UserProfile**](UserProfile.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserProfileResponse } from './api';
+
+const instance: UserProfileResponse = {
+ status,
+ msg,
+ user_profile,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserProfileUpdateRequest.md b/jb-ui/src/api_fsb/docs/UserProfileUpdateRequest.md
new file mode 100644
index 0000000..6527d91
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserProfileUpdateRequest.md
@@ -0,0 +1,20 @@
+# UserProfileUpdateRequest
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**email_address** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserProfileUpdateRequest } from './api';
+
+const instance: UserProfileUpdateRequest = {
+ email_address,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserProfilesResponse.md b/jb-ui/src/api_fsb/docs/UserProfilesResponse.md
new file mode 100644
index 0000000..1b8bfad
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserProfilesResponse.md
@@ -0,0 +1,24 @@
+# UserProfilesResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**user_profiles** | [**Array&lt;UserProfile&gt;**](UserProfile.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserProfilesResponse } from './api';
+
+const instance: UserProfilesResponse = {
+ status,
+ msg,
+ user_profiles,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserQuestionAnswerIn.md b/jb-ui/src/api_fsb/docs/UserQuestionAnswerIn.md
new file mode 100644
index 0000000..38e306a
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserQuestionAnswerIn.md
@@ -0,0 +1,23 @@
+# UserQuestionAnswerIn
+
+Send the answers to one or more questions for a user. A question is uniquely specified by the question_id key. The answer is: the choice_id if the question_type is \"MC\" the actual entered text if the question_type is \"TE\" TODO: look up the question_type from the question_id to apply MC or TE specific validation on the answer(s)
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**question_id** | **string** | | [default to undefined]
+**answer** | **Array&lt;string&gt;** | The user\&#39;s answers to this question. Must pass the choice_id if the question is a Multiple Choice, or the actual text if the question is Text Entry | [default to undefined]
+
+## Example
+
+```typescript
+import { UserQuestionAnswerIn } from './api';
+
+const instance: UserQuestionAnswerIn = {
+ question_id,
+ answer,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserStreak.md b/jb-ui/src/api_fsb/docs/UserStreak.md
new file mode 100644
index 0000000..19a1574
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserStreak.md
@@ -0,0 +1,40 @@
+# UserStreak
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**country_iso** | **string** | | [default to undefined]
+**period** | [**StreakPeriod**](StreakPeriod.md) | | [default to undefined]
+**fulfillment** | [**StreakFulfillment**](StreakFulfillment.md) | | [default to undefined]
+**current_streak** | **number** | | [default to undefined]
+**longest_streak** | **number** | | [default to undefined]
+**state** | [**StreakState**](StreakState.md) | | [default to undefined]
+**last_fulfilled_period_start** | **string** | | [optional] [default to undefined]
+**timezone_name** | **string** | | [readonly] [default to undefined]
+**current_period_bounds** | **Array&lt;any&gt;** | | [default to undefined]
+**last_fulfilled_period_bounds** | **Array&lt;any&gt;** | | [default to undefined]
+**time_remaining_in_period** | **number** | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserStreak } from './api';
+
+const instance: UserStreak = {
+ country_iso,
+ period,
+ fulfillment,
+ current_streak,
+ longest_streak,
+ state,
+ last_fulfilled_period_start,
+ timezone_name,
+ current_period_bounds,
+ last_fulfilled_period_bounds,
+ time_remaining_in_period,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserType.md b/jb-ui/src/api_fsb/docs/UserType.md
new file mode 100644
index 0000000..43cbcca
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserType.md
@@ -0,0 +1,36 @@
+# UserType
+
+
+## Enum
+
+* `Business` (value: `'business'`)
+
+* `Cafe` (value: `'cafe'`)
+
+* `Cellular` (value: `'cellular'`)
+
+* `College` (value: `'college'`)
+
+* `ContentDeliveryNetwork` (value: `'content_delivery_network'`)
+
+* `ConsumerPrivacyNetwork` (value: `'consumer_privacy_network'`)
+
+* `Government` (value: `'government'`)
+
+* `Hosting` (value: `'hosting'`)
+
+* `Library` (value: `'library'`)
+
+* `Military` (value: `'military'`)
+
+* `Residential` (value: `'residential'`)
+
+* `Router` (value: `'router'`)
+
+* `School` (value: `'school'`)
+
+* `SearchEngineSpider` (value: `'search_engine_spider'`)
+
+* `Traveler` (value: `'traveler'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserWalletBalance.md b/jb-ui/src/api_fsb/docs/UserWalletBalance.md
new file mode 100644
index 0000000..dbfc71c
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserWalletBalance.md
@@ -0,0 +1,28 @@
+# UserWalletBalance
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**amount** | **number** | (USD cents) The amount in the user\&#39;s wallet. | [default to undefined]
+**redeemable_amount** | **number** | (USD cents) The amount in the user\&#39;s wallet this is currently redeemable. | [default to undefined]
+**payout_format** | **string** | The format describing the str representation of a payout. Typically, this would be displayed to a user. The payout_format is similar to python format string with a subset of functionality supported. Only float with a precision are supported along with an optional comma for a thousands separator. In addition, a mathematical operator can be applied, such as dividing by 100. Examples are shown assuming payout &#x3D; 100 (one dollar). - \&quot;{payout*10:,.0f} Points\&quot; -&gt; \&quot;1,000 Points\&quot; - \&quot;${payout/100:.2f}\&quot; -&gt; \&quot;$1.00\&quot; | [default to undefined]
+**amount_string** | **string** | The \&#39;amount\&#39; with the payout_format applied. Can be displayed to the user. | [default to undefined]
+**redeemable_amount_string** | **string** | The \&#39;redeemable_amount\&#39; with the payout_format applied. Can be displayed to the user. | [default to undefined]
+
+## Example
+
+```typescript
+import { UserWalletBalance } from './api';
+
+const instance: UserWalletBalance = {
+ amount,
+ redeemable_amount,
+ payout_format,
+ amount_string,
+ redeemable_amount_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserWalletBalanceResponse.md b/jb-ui/src/api_fsb/docs/UserWalletBalanceResponse.md
new file mode 100644
index 0000000..f9cdc80
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserWalletBalanceResponse.md
@@ -0,0 +1,24 @@
+# UserWalletBalanceResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**status** | **string** | The status of the API response. | [default to undefined]
+**msg** | **string** | | [optional] [default to undefined]
+**wallet** | [**UserWalletBalance**](UserWalletBalance.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { UserWalletBalanceResponse } from './api';
+
+const instance: UserWalletBalanceResponse = {
+ status,
+ msg,
+ wallet,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/UserWalletConfig.md b/jb-ui/src/api_fsb/docs/UserWalletConfig.md
new file mode 100644
index 0000000..96d9587
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/UserWalletConfig.md
@@ -0,0 +1,27 @@
+# UserWalletConfig
+
+Stores configuration for the user wallet handling
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**enabled** | **boolean** | If enabled, the users\&#39; wallets are managed. | [optional] [default to false]
+**amt** | **boolean** | Uses Amazon Mechanical Turk | [optional] [default to false]
+**supported_payout_types** | [**Set&lt;PayoutType&gt;**](PayoutType.md) | | [optional] [default to undefined]
+**min_cashout** | **string** | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { UserWalletConfig } from './api';
+
+const instance: UserWalletConfig = {
+ enabled,
+ amt,
+ supported_payout_types,
+ min_cashout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ValidationError.md b/jb-ui/src/api_fsb/docs/ValidationError.md
new file mode 100644
index 0000000..d2e7ec1
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ValidationError.md
@@ -0,0 +1,24 @@
+# ValidationError
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**loc** | [**Array&lt;ValidationErrorLocInner&gt;**](ValidationErrorLocInner.md) | | [default to undefined]
+**msg** | **string** | | [default to undefined]
+**type** | **string** | | [default to undefined]
+
+## Example
+
+```typescript
+import { ValidationError } from './api';
+
+const instance: ValidationError = {
+ loc,
+ msg,
+ type,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/ValidationErrorLocInner.md b/jb-ui/src/api_fsb/docs/ValidationErrorLocInner.md
new file mode 100644
index 0000000..8d54b45
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/ValidationErrorLocInner.md
@@ -0,0 +1,18 @@
+# ValidationErrorLocInner
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { ValidationErrorLocInner } from './api';
+
+const instance: ValidationErrorLocInner = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WXETOfferwall.md b/jb-ui/src/api_fsb/docs/WXETOfferwall.md
new file mode 100644
index 0000000..5dbdb16
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WXETOfferwall.md
@@ -0,0 +1,29 @@
+# WXETOfferwall
+
+Returns buckets from WXET as single tasks Offerwall code: `55a4e1a9`
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier to reference a generated offerwall | [default to undefined]
+**availability_count** | **number** | Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated. | [default to undefined]
+**attempted_live_eligible_count** | **number** | Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available. | [optional] [default to 0]
+**buckets** | [**Array&lt;WXETOfferwallBucket&gt;**](WXETOfferwallBucket.md) | | [optional] [default to undefined]
+**offerwall_reasons** | [**Array&lt;OfferwallReason&gt;**](OfferwallReason.md) | Explanations describing why so many or few opportunities are available. | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { WXETOfferwall } from './api';
+
+const instance: WXETOfferwall = {
+ id,
+ availability_count,
+ attempted_live_eligible_count,
+ buckets,
+ offerwall_reasons,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WXETOfferwallBucket.md b/jb-ui/src/api_fsb/docs/WXETOfferwallBucket.md
new file mode 100644
index 0000000..0e006bf
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WXETOfferwallBucket.md
@@ -0,0 +1,26 @@
+# WXETOfferwallBucket
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **string** | Unique identifier this particular bucket | [default to undefined]
+**uri** | **string** | The URL to send a respondent into. Must not edit this URL in any way | [default to undefined]
+**duration** | **number** | The bucket\&#39;s expected duration, in seconds | [default to undefined]
+**min_payout** | **number** | The bucket\&#39;s min payout, in usd cents | [default to undefined]
+
+## Example
+
+```typescript
+import { WXETOfferwallBucket } from './api';
+
+const instance: WXETOfferwallBucket = {
+ id,
+ uri,
+ duration,
+ min_payout,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WXETOfferwallResponse.md b/jb-ui/src/api_fsb/docs/WXETOfferwallResponse.md
new file mode 100644
index 0000000..5ad22e2
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WXETOfferwallResponse.md
@@ -0,0 +1,22 @@
+# WXETOfferwallResponse
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**info** | [**OfferWallInfo**](OfferWallInfo.md) | | [default to undefined]
+**offerwall** | [**WXETOfferwall**](WXETOfferwall.md) | | [default to undefined]
+
+## Example
+
+```typescript
+import { WXETOfferwallResponse } from './api';
+
+const instance: WXETOfferwallResponse = {
+ info,
+ offerwall,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallAdjustedStatus.md b/jb-ui/src/api_fsb/docs/WallAdjustedStatus.md
new file mode 100644
index 0000000..787482e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallAdjustedStatus.md
@@ -0,0 +1,14 @@
+# WallAdjustedStatus
+
+
+## Enum
+
+* `Ac` (value: `'ac'`)
+
+* `Af` (value: `'af'`)
+
+* `Ca` (value: `'ca'`)
+
+* `Cc` (value: `'cc'`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallOut.md b/jb-ui/src/api_fsb/docs/WallOut.md
new file mode 100644
index 0000000..aca3aef
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallOut.md
@@ -0,0 +1,56 @@
+# WallOut
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **string** | | [optional] [default to undefined]
+**source** | [**Source**](Source.md) | | [default to undefined]
+**buyer_id** | [**BuyerId**](BuyerId.md) | | [optional] [default to undefined]
+**req_survey_id** | **string** | | [default to undefined]
+**started** | **string** | | [optional] [default to undefined]
+**survey_id** | [**SurveyId**](SurveyId.md) | | [optional] [default to undefined]
+**finished** | [**Finished**](Finished.md) | | [optional] [default to undefined]
+**status** | [**WallOutStatus**](WallOutStatus.md) | | [optional] [default to undefined]
+**status_code_1** | [**WallOutStatusCode1**](WallOutStatusCode1.md) | | [optional] [default to undefined]
+**status_code_2** | [**WallOutStatusCode2**](WallOutStatusCode2.md) | | [optional] [default to undefined]
+**ext_status_code_1** | [**ExtStatusCode1**](ExtStatusCode1.md) | | [optional] [default to undefined]
+**ext_status_code_2** | [**ExtStatusCode2**](ExtStatusCode2.md) | | [optional] [default to undefined]
+**ext_status_code_3** | [**ExtStatusCode3**](ExtStatusCode3.md) | | [optional] [default to undefined]
+**report_value** | [**WallOutReportValue**](WallOutReportValue.md) | | [optional] [default to undefined]
+**report_notes** | [**ReportNotes**](ReportNotes.md) | | [optional] [default to undefined]
+**adjusted_status** | [**WallOutAdjustedStatus**](WallOutAdjustedStatus.md) | | [optional] [default to undefined]
+**adjusted_timestamp** | [**AdjustedTimestamp**](AdjustedTimestamp.md) | | [optional] [default to undefined]
+**user_cpi** | **number** | The amount the user would earn from completing this task, if the status was a complete. If the BP has no payout xform, the user_cpi is None. This is analogous to the session\&#39;s user_payout. | [optional] [default to undefined]
+**user_cpi_string** | [**UserCpiString**](UserCpiString.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { WallOut } from './api';
+
+const instance: WallOut = {
+ uuid,
+ source,
+ buyer_id,
+ req_survey_id,
+ started,
+ survey_id,
+ finished,
+ status,
+ status_code_1,
+ status_code_2,
+ ext_status_code_1,
+ ext_status_code_2,
+ ext_status_code_3,
+ report_value,
+ report_notes,
+ adjusted_status,
+ adjusted_timestamp,
+ user_cpi,
+ user_cpi_string,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallOutAdjustedStatus.md b/jb-ui/src/api_fsb/docs/WallOutAdjustedStatus.md
new file mode 100644
index 0000000..d7cff7d
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallOutAdjustedStatus.md
@@ -0,0 +1,18 @@
+# WallOutAdjustedStatus
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { WallOutAdjustedStatus } from './api';
+
+const instance: WallOutAdjustedStatus = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallOutReportValue.md b/jb-ui/src/api_fsb/docs/WallOutReportValue.md
new file mode 100644
index 0000000..8687a8f
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallOutReportValue.md
@@ -0,0 +1,18 @@
+# WallOutReportValue
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { WallOutReportValue } from './api';
+
+const instance: WallOutReportValue = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallOutStatus.md b/jb-ui/src/api_fsb/docs/WallOutStatus.md
new file mode 100644
index 0000000..40ad387
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallOutStatus.md
@@ -0,0 +1,18 @@
+# WallOutStatus
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { WallOutStatus } from './api';
+
+const instance: WallOutStatus = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallOutStatusCode1.md b/jb-ui/src/api_fsb/docs/WallOutStatusCode1.md
new file mode 100644
index 0000000..b6e707e
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallOutStatusCode1.md
@@ -0,0 +1,19 @@
+# WallOutStatusCode1
+
+__High level status code for outcome of the session.__ This should only be NULL if the Status is ABANDON or TIMEOUT Allowed values: - __BUYER_FAIL__: User terminated in buyer survey - __BUYER_QUALITY_FAIL__: User terminated in buyer survey for quality reasons - __PS_FAIL__: User failed in marketplace\'s prescreener - __PS_QUALITY__: User rejected by marketplace for quality reasons - __PS_BLOCKED__: User is explicitly blocked by the marketplace. Note: on some marketplaces, users can have multiple PS_QUALITY terminations and still complete surveys. - __PS_OVERQUOTA__: User rejected by marketplace for over quota - __PS_DUPLICATE__: User rejected by marketplace for duplicate - __GRS_FAIL__: The user failed within the GRS Platform - __GRS_QUALITY_FAIL__: The user failed within the GRS Platform for quality reasons - __GRS_ABANDON__: The user abandoned/timed out within the GRS Platform - __PS_ABANDON__: The user abandoned/timed out within the marketplace\'s pre-screen system. Note: On most marketplaces, we have no way of distinguishing between this and BUYER_ABANDON. BUYER_ABANDON is used as the default, unless we know it is PS_ABANDON. - __BUYER_ABANDON__: The user abandoned/timed out within the client survey - __UNKNOWN__: The status code is not documented - __COMPLETE__: The user completed the task successfully - __MARKETPLACE_FAIL__: Something was wrong upon the user redirecting from the marketplace, e.g. no postback received, or url hashing failures. - __SESSION_START_FAIL__: User failed before being sent into a marketplace - __SESSION_CONTINUE_FAIL__: User failed between attempts - __SESSION_START_QUALITY_FAIL__: User failed before being sent into a marketplace for \"security\" reasons - __SESSION_CONTINUE_QUALITY_FAIL__: User failed between attempts for \"security\" reasons
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { WallOutStatusCode1 } from './api';
+
+const instance: WallOutStatusCode1 = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallOutStatusCode2.md b/jb-ui/src/api_fsb/docs/WallOutStatusCode2.md
new file mode 100644
index 0000000..d7f4a71
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallOutStatusCode2.md
@@ -0,0 +1,19 @@
+# WallOutStatusCode2
+
+This should be set if the Wall.status_code_1 is MARKETPLACE_FAIL Allowed values: - __URL_HASHING_CHECK_FAILED__: The redirect URL (coming back from the marketplace) failed hashing checks - __BROKEN_REDIRECT__: The redirect URL was missing required query params or was unparseable - __INVALID_REDIRECT__: The redirect URL was invalid or inconsistent in some way and as a result we could not determine the outcome. This could be if a redirect received did not match the user\'s most recent attempt. - __INVALID_MARKETPLACE_POSTBACK__: The redirect indicated a complete, but no/invalid Postback was received from the marketplace - __NO_MARKETPLACE_POSTBACK__: No/invalid Postback was received from the marketplace. Used in cases where the redirect does not contain a status. - __COMPLETE_TOO_FAST__: The marketplace indicates the user completed the survey, but we don\'t think this is valid due to speeding. Generally this cutoff is the 95th percentile of our calculated CompletionTime survey stat. - __INTERNAL_ERROR__: Something happened during the handling of this redirect (on our side)
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+## Example
+
+```typescript
+import { WallOutStatusCode2 } from './api';
+
+const instance: WallOutStatusCode2 = {
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WallStatusCode2.md b/jb-ui/src/api_fsb/docs/WallStatusCode2.md
new file mode 100644
index 0000000..4962f2b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WallStatusCode2.md
@@ -0,0 +1,21 @@
+# WallStatusCode2
+
+This should be set if the Wall.status_code_1 is MARKETPLACE_FAIL
+
+## Enum
+
+* `NUMBER_12` (value: `12`)
+
+* `NUMBER_16` (value: `16`)
+
+* `NUMBER_17` (value: `17`)
+
+* `NUMBER_13` (value: `13`)
+
+* `NUMBER_18` (value: `18`)
+
+* `NUMBER_14` (value: `14`)
+
+* `NUMBER_15` (value: `15`)
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/docs/WalletApi.md b/jb-ui/src/api_fsb/docs/WalletApi.md
new file mode 100644
index 0000000..80bd3ed
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/WalletApi.md
@@ -0,0 +1,478 @@
+# WalletApi
+
+All URIs are relative to *https://fsb.generalresearch.com*
+
+|Method | HTTP request | Description|
+|------------- | ------------- | -------------|
+|[**createCashoutMethodProductIdCashoutMethodsPost**](#createcashoutmethodproductidcashoutmethodspost) | **POST** /{product_id}/cashout_methods/ | Create Cashout Method|
+|[**deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete**](#deletecashoutmethodproductidcashoutmethodscashoutmethodiddelete) | **DELETE** /{product_id}/cashout_methods/{cashout_method_id}/ | Delete Cashout Method|
+|[**getCashoutDetailProductIdCashoutCashoutIdGet**](#getcashoutdetailproductidcashoutcashoutidget) | **GET** /{product_id}/cashout/{cashout_id}/ | Get Cashout Detail|
+|[**getCashoutMethodsProductIdCashoutMethodsGet**](#getcashoutmethodsproductidcashoutmethodsget) | **GET** /{product_id}/cashout_methods/ | Get Cashout Methods|
+|[**getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet**](#getexpectedredemptionvalueproductidcashoutmethodcashoutmethodidvalueget) | **GET** /{product_id}/cashout_method/{cashout_method_id}/value/ | Get Expected Redemption Value|
+|[**getUserTransactionHistoryProductIdTransactionHistoryGet**](#getusertransactionhistoryproductidtransactionhistoryget) | **GET** /{product_id}/transaction_history/ | Get User Transaction History|
+|[**getUserWalletBalanceProductIdWalletGet**](#getuserwalletbalanceproductidwalletget) | **GET** /{product_id}/wallet/ | Get User Wallet Balance|
+|[**submitUserCashoutProductIdCashoutPost**](#submitusercashoutproductidcashoutpost) | **POST** /{product_id}/cashout/ | Submit User Cashout|
+
+# **createCashoutMethodProductIdCashoutMethodsPost**
+> CashoutMethodResponse createCashoutMethodProductIdCashoutMethodsPost(body)
+
+A user can only have 1 unique Cashout Method of any type at a time (eg. they can\'t create multiple paypal payout methods). Cashout Methods cannot be edited, they can only be created or deleted. Creating different Cashout Methods will require type-dependent request data attributes in order to be successfully created. Currently only creating paypal or Cash in Mail cashout methods are supported
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration,
+ Body
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let body: Body; //
+
+const { status, data } = await apiInstance.createCashoutMethodProductIdCashoutMethodsPost(
+ productId,
+ body
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **body** | **Body**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+
+
+### Return type
+
+**CashoutMethodResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete**
+> StatusResponse deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete()
+
+Delete a cashout method
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let cashoutMethodId: string; //The ID of the cashout method to delete (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.deleteCashoutMethodProductIdCashoutMethodsCashoutMethodIdDelete(
+ productId,
+ cashoutMethodId,
+ bpuid
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **cashoutMethodId** | [**string**] | The ID of the cashout method to delete | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**StatusResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getCashoutDetailProductIdCashoutCashoutIdGet**
+> CashoutRequestResponse getCashoutDetailProductIdCashoutCashoutIdGet()
+
+Retrieve the details for a specific Cashout event
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let cashoutId: string; //The cashout event ID (default to undefined)
+
+const { status, data } = await apiInstance.getCashoutDetailProductIdCashoutCashoutIdGet(
+ productId,
+ cashoutId
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **cashoutId** | [**string**] | The cashout event ID | defaults to undefined|
+
+
+### Return type
+
+**CashoutRequestResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getCashoutMethodsProductIdCashoutMethodsGet**
+> CashoutMethodsResponse getCashoutMethodsProductIdCashoutMethodsGet()
+
+Retrieve the current available mechanisms that a user can use to retrieve funds.
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.getCashoutMethodsProductIdCashoutMethodsGet(
+ productId,
+ bpuid
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**CashoutMethodsResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet**
+> CashoutMethodForeignValueResponse getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet()
+
+Use this function to get the \"value\" (in local currency, e.g. CAD, BTC) for this cashout_method, for amount (in USD cents).
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let cashoutMethodId: string; //The ID of the cashout method (default to undefined)
+let amount: number; //(USD cents) The amount to convert (default to undefined)
+
+const { status, data } = await apiInstance.getExpectedRedemptionValueProductIdCashoutMethodCashoutMethodIdValueGet(
+ productId,
+ cashoutMethodId,
+ amount
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **cashoutMethodId** | [**string**] | The ID of the cashout method | defaults to undefined|
+| **amount** | [**number**] | (USD cents) The amount to convert | defaults to undefined|
+
+
+### Return type
+
+**CashoutMethodForeignValueResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getUserTransactionHistoryProductIdTransactionHistoryGet**
+> UserLedgerTransactionsResponse getUserTransactionHistoryProductIdTransactionHistoryGet()
+
+Return array of user events that altered their wallet balance
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+let createdAfter: string; //Filter transactions created after this timestamp (optional) (default to undefined)
+let createdBefore: string; //Filter transactions created before this timestamp (optional) (default to undefined)
+let orderBy: string; //Comma-separated fields to order by (optional) (default to 'created')
+let page: number; // (optional) (default to 1)
+let size: number; // (optional) (default to 50)
+
+const { status, data } = await apiInstance.getUserTransactionHistoryProductIdTransactionHistoryGet(
+ productId,
+ bpuid,
+ createdAfter,
+ createdBefore,
+ orderBy,
+ page,
+ size
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+| **createdAfter** | [**string**] | Filter transactions created after this timestamp | (optional) defaults to undefined|
+| **createdBefore** | [**string**] | Filter transactions created before this timestamp | (optional) defaults to undefined|
+| **orderBy** | [**string**] | Comma-separated fields to order by | (optional) defaults to 'created'|
+| **page** | [**number**] | | (optional) defaults to 1|
+| **size** | [**number**] | | (optional) defaults to 50|
+
+
+### Return type
+
+**UserLedgerTransactionsResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getUserWalletBalanceProductIdWalletGet**
+> UserWalletBalanceResponse getUserWalletBalanceProductIdWalletGet()
+
+Retrieve the current balance of a respondent\'s wallet balance for display
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let bpuid: string; //A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. (default to undefined)
+
+const { status, data } = await apiInstance.getUserWalletBalanceProductIdWalletGet(
+ productId,
+ bpuid
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+| **bpuid** | [**string**] | A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values. | defaults to undefined|
+
+
+### Return type
+
+**UserWalletBalanceResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **submitUserCashoutProductIdCashoutPost**
+> CashoutRequestResponse submitUserCashoutProductIdCashoutPost(createCashoutRequest)
+
+Request a cashout taken from a user\'s available wallet balance, to be paid via a particular cashout method.
+
+### Example
+
+```typescript
+import {
+ WalletApi,
+ Configuration,
+ CreateCashoutRequest
+} from './api';
+
+const configuration = new Configuration();
+const apiInstance = new WalletApi(configuration);
+
+let productId: string; //The Brokerage Product ID provided by GRL. (default to undefined)
+let createCashoutRequest: CreateCashoutRequest; //
+
+const { status, data } = await apiInstance.submitUserCashoutProductIdCashoutPost(
+ productId,
+ createCashoutRequest
+);
+```
+
+### Parameters
+
+|Name | Type | Description | Notes|
+|------------- | ------------- | ------------- | -------------|
+| **createCashoutRequest** | **CreateCashoutRequest**| | |
+| **productId** | [**string**] | The Brokerage Product ID provided by GRL. | defaults to undefined|
+
+
+### Return type
+
+**CashoutRequestResponse**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+|**200** | Successful Response | - |
+|**422** | Validation Error | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/jb-ui/src/api_fsb/docs/YieldManConfig.md b/jb-ui/src/api_fsb/docs/YieldManConfig.md
new file mode 100644
index 0000000..f6d245b
--- /dev/null
+++ b/jb-ui/src/api_fsb/docs/YieldManConfig.md
@@ -0,0 +1,22 @@
+# YieldManConfig
+
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**category_request** | [**OfferWallCategoryRequest**](OfferWallCategoryRequest.md) | | [optional] [default to undefined]
+**scoring_params** | [**OfferWallRequestYieldmanParams**](OfferWallRequestYieldmanParams.md) | | [optional] [default to undefined]
+
+## Example
+
+```typescript
+import { YieldManConfig } from './api';
+
+const instance: YieldManConfig = {
+ category_request,
+ scoring_params,
+};
+```
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/jb-ui/src/api_fsb/git_push.sh b/jb-ui/src/api_fsb/git_push.sh
new file mode 100644
index 0000000..f53a75d
--- /dev/null
+++ b/jb-ui/src/api_fsb/git_push.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+git_host=$4
+
+if [ "$git_host" = "" ]; then
+ git_host="github.com"
+ echo "[INFO] No command line input provided. Set \$git_host to $git_host"
+fi
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=$(git remote)
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
diff --git a/jb-ui/src/api_fsb/index.ts b/jb-ui/src/api_fsb/index.ts
new file mode 100644
index 0000000..0801502
--- /dev/null
+++ b/jb-ui/src/api_fsb/index.ts
@@ -0,0 +1,18 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * General Research Full Service Brokerage API
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.2.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+export * from "./api";
+export * from "./configuration";
+
diff --git a/jb-ui/src/api_fsb/openapi.json b/jb-ui/src/api_fsb/openapi.json
new file mode 100644
index 0000000..8e9e5db
--- /dev/null
+++ b/jb-ui/src/api_fsb/openapi.json
@@ -0,0 +1 @@
+{"openapi":"3.1.0","info":{"title":"General Research Full Service Brokerage API","version":"1.2.0"},"servers":[{"url":"https://fsb.generalresearch.com/","description":"Production environment"}],"paths":{"/{product_id}/offerwall/5fl8bpv5/":{"get":{"tags":["Offerwall"],"summary":"Single Offerwall","description":"Only returns a single bucket with the top scoring tasks.","operationId":"Single_Offerwall__product_id__offerwall_5fl8bpv5__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleEntryOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/45b7228a7/":{"get":{"tags":["Offerwall"],"summary":"Topn Offerwall","description":"Returns an offerwall with buckets that are clustered by the `split_by` argument\nusing KMeans clustering.","operationId":"TopN_Offerwall__product_id__offerwall_45b7228a7__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":1,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopNOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/b59a2d2b/":{"get":{"tags":["Offerwall"],"summary":"Starwall Offerwall","description":"Returns an offerwall with buckets that are clustered by setting as seeds the\nhighest scoring surveys for each bin, then the rest are distributed\naccording to their Euclidean distance using the bucket's features.","operationId":"Starwall_Offerwall__product_id__offerwall_b59a2d2b__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":1,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StarwallOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/b145b803/":{"get":{"tags":["Offerwall"],"summary":"Topn Plus Offerwall","description":"Same as the TopNOfferWall, but the buckets include contents.","operationId":"TopN_Plus_Offerwall__product_id__offerwall_b145b803__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":3,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopNPlusOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/d48cce47/":{"get":{"tags":["Offerwall"],"summary":"Topn Plus Block Offerwall","description":"Same as the TopNOfferWall, but the buckets include contents and no\nbuckets are returned if the user is blocked.","operationId":"TopN_Plus_Block_Offerwall__product_id__offerwall_d48cce47__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":3,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopNPlusBlockOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/1e5f0af8/":{"get":{"tags":["Offerwall"],"summary":"Topn Plus Block Recontact Offerwall","description":"Same as the TopNOfferWall, but the buckets include contents, no buckets\nare returned if the user is blocked, and each bucket includes a\n`is_recontact` key.","operationId":"TopN_Plus_Block_Recontact_Offerwall__product_id__offerwall_1e5f0af8__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":3,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopNPlusBlockRecontactOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/5481f322/":{"get":{"tags":["Offerwall"],"summary":"Starwall Plus Offerwall","description":"Same as the StarwallOfferWall, but the buckets include contents.","operationId":"Starwall_Plus_Offerwall__product_id__offerwall_5481f322__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":3,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StarwallPlusOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/7fa1b3f4/":{"get":{"tags":["Offerwall"],"summary":"Starwall Plus Block Offerwall","description":"Same as the StarwallOfferWall, but the buckets include contents and no\nbuckets are returned if the user is blocked.","operationId":"Starwall_Plus_Block_Offerwall__product_id__offerwall_7fa1b3f4__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":3,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StarwallPlusBlockOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/630db2a4/":{"get":{"tags":["Offerwall"],"summary":"Starwall Plus Block Recontact Offerwall","description":"Same as the StarwallOfferWall, but the buckets include contents, no buckets\nare returned if the user is blocked, and each bucket includes a\n`is_recontact` key.","operationId":"Starwall_Plus_Block_Recontact_Offerwall__product_id__offerwall_630db2a4__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":3,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"split_by","in":"query","required":false,"schema":{"enum":["payout","duration"],"type":"string","description":"Cluster tasks by payout or duration","default":"payout","title":"Split By"},"description":"Cluster tasks by payout or duration"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StarwallPlusBlockRecontactOfferWallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/5fa23085/":{"get":{"tags":["Offerwall"],"summary":"Marketplace Offerwall","description":"Returns buckets grouped by marketplace, one per marketplace, with the\ntasks ordered by quality.","operationId":"Marketplace_Offerwall__product_id__offerwall_5fa23085__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":3,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/6f27b1ae/":{"get":{"tags":["Offerwall"],"summary":"One Shot Offerwall","description":"Each bucket has only 1 single task, and only basic info is returned\n about each bucket.","operationId":"One_Shot_Offerwall__product_id__offerwall_6f27b1ae__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":8,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"sources","in":"query","required":false,"schema":{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/Source"},"description":"Restrict tasks to those from these marketplaces only.","title":"Sources"},"description":"Restrict tasks to those from these marketplaces only."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OneShotOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/55a4e1a9/":{"get":{"tags":["Offerwall"],"summary":"Wxet Offerwall","description":"Each bucket has only 1 single task, and only basic info is returned\n about each bucket.","operationId":"WXET_Offerwall__product_id__offerwall_55a4e1a9__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":8,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WXETOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/37d1da64/":{"get":{"tags":["Offerwall"],"summary":"Offerwall Softpair","description":"This offerwall contains tasks for which the user has a conditional\neligibility. The questions that a user must answer to determine the\neligibility are included within each bucket. Additionally, the question\ndefinitions are included for convenience.","operationId":"offerwall_softpair__product_id__offerwall_37d1da64__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":12,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":1,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"max_options","in":"query","required":false,"schema":{"type":"integer","description":"Max number of options an allowed question can have (allowed to be asked)","default":40,"title":"Max Options"},"description":"Max number of options an allowed question can have (allowed to be asked)"},{"name":"max_questions","in":"query","required":false,"schema":{"type":"integer","description":"Max number of missing questions on a single bin","default":3,"title":"Max Questions"},"description":"Max number of missing questions on a single bin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftPairOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/37d1da64/{offerwall_id}/":{"post":{"tags":["Offerwall"],"summary":"Offerwall Softpair Post","description":"This is a custom endpoint for a softpair-style offerwall that allows\nyou to update profiling answers and then immediately get back the\nupdated offerwall","operationId":"offerwall_softpair_post__product_id__offerwall_37d1da64__offerwall_id___post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"offerwall_id","in":"path","required":true,"schema":{"type":"string","description":"The offerwall ID the user is interacting with","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"],"title":"Offerwall Id"},"description":"The offerwall ID the user is interacting with"},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A session id (uuid4.hex)","examples":["dd6aa32cfe834839a80195563f528337"],"title":"Session Id"},"description":"A session id (uuid4.hex)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_offerwall_softpair_post__product_id__offerwall_37d1da64__offerwall_id___post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftPairOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/7a89dcdb/":{"get":{"tags":["Offerwall"],"summary":"Offerwall Softpair Block","description":"This offerwall contains tasks for which the user has a conditional\neligibility. The questions that a user must answer to determine the\neligibility are included within each bucket. Additionally, the question\ndefinitions are included for convenience.\nNo buckets are returned if the user is blocked.","operationId":"offerwall_softpair_block__product_id__offerwall_7a89dcdb__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"languages","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)","title":"Languages"},"description":"Respondent's desired languages (ISO 639-2/B, lowercase)"},{"name":"behavior","in":"query","required":false,"schema":{"type":"string","maxLength":12,"description":"Allows using custom scoring functions. Please discuss directly with GRL.","title":"Behavior"},"description":"Allows using custom scoring functions. Please discuss directly with GRL."},{"name":"min_payout","in":"query","required":false,"schema":{"type":"string","description":"Decimal representation of the minimum amount of USD that any of the tasks will pay","examples":["1.23"],"title":"Min Payout"},"description":"Decimal representation of the minimum amount of USD that any of the tasks will pay"},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","description":"Maximum length of desired task (in seconds).","title":"Duration"},"description":"Maximum length of desired task (in seconds)."},{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split.","default":12,"title":"N Bins"},"description":"Number of bins requested in the offerwall. If n_bins=1 there is no grouping and you get all \n duration + payout metrics on across all (as shown by the availability_count).\n n_bins=0 will return back an empty bucket array, however, the availability_count will still show \n the total opportunities available for that bpuid + passed in parameter settings.\n n_bins=∞ (or any positive integer) will return back the total number of bins capable of being uniquely split."},{"name":"min_bin_size","in":"query","required":false,"schema":{"type":"integer","description":"Minimum number of tasks that need to be in a bucket","default":1,"title":"Min Bin Size"},"description":"Minimum number of tasks that need to be in a bucket"},{"name":"max_options","in":"query","required":false,"schema":{"type":"integer","description":"Max number of options an allowed question can have (allowed to be asked)","default":40,"title":"Max Options"},"description":"Max number of options an allowed question can have (allowed to be asked)"},{"name":"max_questions","in":"query","required":false,"schema":{"type":"integer","description":"Max number of missing questions on a single bin","default":3,"title":"Max Questions"},"description":"Max number of missing questions on a single bin"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftPairOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/offerwall/7a89dcdb/{offerwall_id}/":{"post":{"tags":["Offerwall"],"summary":"Offerwall Softpair Block Post","description":"This is a custom endpoint for a softpair-style offerwall that allows\nyou to update profiling answers and then immediately get back the\nupdated offerwall","operationId":"offerwall_softpair_block_post__product_id__offerwall_7a89dcdb__offerwall_id___post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"offerwall_id","in":"path","required":true,"schema":{"type":"string","description":"The offerwall ID the user is interacting with","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"],"title":"Offerwall Id"},"description":"The offerwall ID the user is interacting with"},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A session id (uuid4.hex)","examples":["dd6aa32cfe834839a80195563f528337"],"title":"Session Id"},"description":"A session id (uuid4.hex)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_offerwall_softpair_block_post__product_id__offerwall_7a89dcdb__offerwall_id___post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftPairOfferwallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/status/{tsid}/":{"get":{"tags":["Status"],"summary":"Get Task Status","description":"Retrieve the status of a session by a specific Task Status ID (`tsid`)\nthat is provided in the redirect.\n\nGiven a `tsid`, get back the status of the wall event. This endpoint\nconflates the idea of a wall event and a session, but for these\npurposes, the status and payout of the last wall event in a session\nequals the status and payout for the session.","operationId":"Get_Task_Status__product_id__status__tsid___get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"tsid","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Task Status ID","description":"A unique identifier for the session","examples":["a3848e0a53d64f68a74ced5f61b6eb68"]},"description":"A unique identifier for the session"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusInfoResponseFail"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusInfoResponseFail"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusInfoResponseFail"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/status/":{"get":{"tags":["Status"],"summary":"List Task Statuses","operationId":"List_Task_Statuses__product_id__status__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":false,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Filters the returned task status to only include those done by this user."},{"name":"started_after","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","format":"date-time"}],"description":"Retrieve sessions which were started after this timestamp. If `NULL`, default is 10 days ago.","examples":["2026-02-17T00:46:04.812196Z",1771202765],"title":"Started After"},"description":"Retrieve sessions which were started after this timestamp. If `NULL`, default is 10 days ago."},{"name":"started_before","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","format":"date-time"}],"description":"Retrieve sessions which were started before this timestamp. If `NULL`, default is now.","title":"Started Before"},"description":"Retrieve sessions which were started before this timestamp. If `NULL`, default is now."},{"name":"status","in":"query","required":false,"schema":{"type":"integer","description":"Filter for sessions with this status. See Task Status for description of status.","examples":[3],"title":"Status"},"description":"Filter for sessions with this status. See Task Status for description of status."},{"name":"reconciled","in":"query","required":false,"schema":{"type":"boolean","description":"Only retrieve sessions that have been adjusted. If `reconciled` is True, `adjusted_after` is required.","default":false,"title":"Reconciled"},"description":"Only retrieve sessions that have been adjusted. If `reconciled` is True, `adjusted_after` is required."},{"name":"adjusted_after","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","format":"date-time"}],"description":"Retrieve sessions which were adjusted after this timestamp.","title":"Adjusted After"},"description":"Retrieve sessions which were adjusted after this timestamp."},{"name":"adjusted_before","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","format":"date-time"}],"description":"Retrieve sessions which were adjusted before this timestamp. Default is now.","title":"Adjusted Before"},"description":"Retrieve sessions which were adjusted before this timestamp. Default is now."},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated fields to order by","examples":["-started","started"],"default":"-started","title":"Order By"},"description":"Comma-separated fields to order by"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TasksStatusResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponseFailure"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponseFailure"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponseFailure"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/report/":{"post":{"tags":["Report"],"summary":"Report Task","description":"Send a \"Task Report\" for a respondent's latest started survey,\nregardless of the survey's outcome. Task Reports cannot be provided for\ntask attempts by tsid, or through any other method, they must be given\nimmediately after the respondent's task attempt.\n\nIf a latest attempt can't be found, a ReportTaskResponse is still returned.\n\nIf multiple reasons want to be provided, they should be done at the\nsame time. If multiple reports are given for the same latest started\ntask, the note attribute will be overwritten, while the new unique\nreasons will be appended to the task attempt.\n\nTask Report system contributions by client applications are immediately\nleveraged to aid yield management strategies. For those reasons, it's\nimportant that the respondent submits a Task Report as soon as possible\nand applications doesn't offload this request for a later time. Task\nReport timestamps are a critical component of understanding a Task\nexperience for a respondent.\n\nFor the BP to tell us about a bad survey they want to report\nThe POSTed data looks like:\n {\n 'bpuid': '1234',\n 'reasons': [2],\n 'notes': \"This survey was the worst!\"\n }\nReturns {'status': 'success', 'msg': error_msg}","operationId":"report_task__product_id__report__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportTask"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/profiling-questions/":{"get":{"tags":["Profiling Questions"],"summary":"Get Profiling Questions","description":"Gets a list of profiling questions to ask this user. These questions\nare, as of right now, unanswered. Once a question is answered, it\n(and any other question whose answer is inferred from other answers) is\nremoved from the list. The questions returned are ordered by\nimportance (the key task_score) in descending order.","operationId":"get_profiling_questions__product_id__profiling_questions__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided.","title":"Ip"},"description":"Respondent's IP address (IPv4 or IPv6). Either 'ip' must be provided, or 'country_iso' must be provided if 'ip' is not provided."},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"language_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{3}$","description":"Respondent's desired language (ISO 639-2/B, lowercase)","examples":["eng"],"title":"Language Iso"},"description":"Respondent's desired language (ISO 639-2/B, lowercase)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","exclusiveMinimum":0,"description":"Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions' importance.","title":"Limit"},"description":"Number of questions to return. Questions are ordered, so, selects the N most important. If no limit is passed, then the number of questions returned is dynamically calculated by the questions' importance."},{"name":"is_grs","in":"query","required":false,"schema":{"type":"boolean","description":"If it's the GRS system.","default":false,"title":"Is Grs"},"description":"If it's the GRS system."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpkQuestionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Profiling Questions"],"summary":"Submit Profiling Questions","description":"Send the answers to one or more of these questions for a user. A\nquestion is uniquely specified by the question_id key. The answer is:\nthe choice_id if the question_type is \"MC\" the actual entered text if\nthe question_type is \"TE\"","operationId":"submit_profiling_questions__product_id__profiling_questions__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","description":"The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional.","title":"Session Id"},"description":"The unique identifier for a session in which these questions were asked. Must be a valid UUID. Optional."},{"name":"async","in":"query","required":false,"schema":{"type":"boolean","description":"For internal use.","default":true,"title":"Async"},"description":"For internal use."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_submit_profiling_questions__product_id__profiling_questions__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/profiling-info/":{"get":{"tags":["Profiling Questions"],"summary":"Profiling Info","description":"Get UPK Ontology (list of properties, property info, and allowed values)","operationId":"profiling_info__product_id__profiling_info__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"country_iso","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"language_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{3}$","description":"Respondent's desired language (ISO 639-2/B, lowercase)","examples":["eng"],"title":"Language Iso"},"description":"Respondent's desired language (ISO 639-2/B, lowercase)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilingInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/user-profile/":{"get":{"tags":["Profiling Questions"],"summary":"User Profile","operationId":"user_profile__product_id__user_profile__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"country_iso","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)","examples":["us"],"title":"Country Iso"},"description":"Respondent's country code (ISO 3166-1 alpha-2, lowercase)"},{"name":"language_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{3}$","description":"Respondent's desired language (ISO 639-2/B, lowercase)","examples":["eng"],"title":"Language Iso"},"description":"Respondent's desired language (ISO 639-2/B, lowercase)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/user/{product_user_id}/profile/":{"get":{"tags":["Product User"],"summary":"User Profile","operationId":"user_profile__product_id__user__product_user_id__profile__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"product_user_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Product User"],"summary":"User Profile Update","operationId":"user_profile_update__product_id__user__product_user_id__profile__patch","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"product_user_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/user/by-marketplace-pid/":{"get":{"tags":["Product User"],"summary":"User Profile Filter By Marketplace Pid","operationId":"user_profile_filter_by_marketplace_pid__product_id__user_by_marketplace_pid__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"source","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Source","description":"The marketplace to search"},"description":"The marketplace to search"},{"name":"pid","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","minLength":32,"maxLength":32},"description":"The user's marketplace PID. Supports multiple params","title":"Pid"},"description":"The user's marketplace PID. Supports multiple params"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/leaderboard/timespan/{board_code}/":{"get":{"tags":["Leaderboard"],"summary":"Timespan Leaderboard","operationId":"Timespan_Leaderboard__product_id__leaderboard_timespan__board_code___get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"board_code","in":"path","required":true,"schema":{"$ref":"#/components/schemas/LeaderboardCode","description":"The type of leaderboard. What the \"values\" represent.\n\nAllowed values: \n - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes\n - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout\n - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts"},"description":"The type of leaderboard. What the \"values\" represent.\n\nAllowed values: \n - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes\n - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout\n - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts"},{"name":"freq","in":"query","required":true,"schema":{"$ref":"#/components/schemas/LeaderboardFrequency","description":"The time period range for the leaderboard.\n\nAllowed values: \n - __daily__ *(DAILY)*: UTC midnight to UTC midnight\n - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC\n - __monthly__ *(MONTHLY)*: Jan 1 00:00:00"},"description":"The time period range for the leaderboard.\n\nAllowed values: \n - __daily__ *(DAILY)*: UTC midnight to UTC midnight\n - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC\n - __monthly__ *(MONTHLY)*: Jan 1 00:00:00"},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.","examples":["us"],"title":"Country Iso"},"description":"Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request."},{"name":"bpuid","in":"query","required":false,"schema":{"type":"string","minLength":3,"maxLength":128,"description":"Brokerage Product User ID. If passed, this results in the filtering of rows to include this user's row, plus rows above and below in rank (up to `limit` rows). Otherwise, the top `limit` rows are returned.","examples":["app-user-9329ebd"],"title":"Bpuid"},"description":"Brokerage Product User ID. If passed, this results in the filtering of rows to include this user's row, plus rows above and below in rank (up to `limit` rows). Otherwise, the top `limit` rows are returned."},{"name":"within_time","in":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Any local timestamp falling within the desired leaderboard's period. If not passed, uses the country's current time period.","examples":["2024-02-27","2024-02-27T15:30:00"],"title":"Within Time"},"description":"Any local timestamp falling within the desired leaderboard's period. If not passed, uses the country's current time period."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","exclusiveMaximum":5000,"exclusiveMinimum":0,"description":"Max number of rows to return","default":50,"title":"Limit"},"description":"Max number of rows to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/leaderboard/timespan/{board_code}/winners/":{"get":{"tags":["Leaderboard"],"summary":"Leaderboard Winners","description":"Get the Winners of leaderboard contests","operationId":"Leaderboard_Winners__product_id__leaderboard_timespan__board_code__winners__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"board_code","in":"path","required":true,"schema":{"$ref":"#/components/schemas/LeaderboardCode","description":"The type of leaderboard. What the \"values\" represent.\n\nAllowed values: \n - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes\n - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout\n - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts"},"description":"The type of leaderboard. What the \"values\" represent.\n\nAllowed values: \n - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes\n - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout\n - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts"},{"name":"freq","in":"query","required":true,"schema":{"$ref":"#/components/schemas/LeaderboardFrequency","description":"The time period range for the leaderboard.\n\nAllowed values: \n - __daily__ *(DAILY)*: UTC midnight to UTC midnight\n - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC\n - __monthly__ *(MONTHLY)*: Jan 1 00:00:00"},"description":"The time period range for the leaderboard.\n\nAllowed values: \n - __daily__ *(DAILY)*: UTC midnight to UTC midnight\n - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC\n - __monthly__ *(MONTHLY)*: Jan 1 00:00:00"},{"name":"country_iso","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2}$","description":"Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request.","examples":["us"],"title":"Country Iso"},"description":"Country ISO Code (ISO 3166-1 alpha-2, lowercase) of the requested leaderboard. If not passed, thecountry is determined from the IP address of the HTTP request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardWinnerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/contest/{contest_uuid}/user/{product_user_id}/":{"get":{"tags":["Contest"],"summary":"Get Contest User View","description":"Gets a Contest. Includes several keys that are specific to the requesting user:\n e.g. user_winnings, user_amount.","operationId":"Get_Contest_User_View__product_id__contest__contest_uuid__user__product_user_id___get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"contest_uuid","in":"path","required":true,"schema":{"type":"string","title":"Contest Uuid"}},{"name":"product_user_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RaffleUserView"},{"$ref":"#/components/schemas/LeaderboardContestUserView"},{"$ref":"#/components/schemas/MilestoneUserView"}],"title":"Response Get Contest User View Product Id Contest Contest Uuid User Product User Id Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/contest/user/{product_user_id}/entered/":{"get":{"tags":["Contest"],"summary":"List Contests User Entered","description":"Get contests the requesting user has entered. This includes contests such as milestone\n contests where the user was automatically entered by having a complete for instance.","operationId":"List_Contests_User_Entered__product_id__contest_user__product_user_id__entered__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"product_user_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/RaffleUserView"},{"$ref":"#/components/schemas/LeaderboardContestUserView"},{"$ref":"#/components/schemas/MilestoneUserView"}]},"title":"Response List Contests User Entered Product Id Contest User Product User Id Entered Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/contest/user/{product_user_id}/eligible/":{"get":{"tags":["Contest"],"summary":"List Contests User Eligible","description":"Get contests the requesting user is eligible for.\nContest eligibility may involve the user's country, which is determined by the ip address\n of THIS request.","operationId":"List_Contests_User_Eligible__product_id__contest_user__product_user_id__eligible__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"product_user_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/RaffleUserView"},{"$ref":"#/components/schemas/LeaderboardContestUserView"},{"$ref":"#/components/schemas/MilestoneUserView"}]},"title":"Response List Contests User Eligible Product Id Contest User Product User Id Eligible Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/contest/user/{product_user_id}/winner/":{"get":{"tags":["Contest"],"summary":"List Contests User Winner","description":"Get contests the requesting user has won a prize for.","operationId":"List_Contests_User_Winner__product_id__contest_user__product_user_id__winner__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"product_user_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/RaffleUserView"},{"$ref":"#/components/schemas/LeaderboardContestUserView"},{"$ref":"#/components/schemas/MilestoneUserView"}]},"title":"Response List Contests User Winner Product Id Contest User Product User Id Winner Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/wallet/":{"get":{"tags":["Wallet"],"summary":"Get User Wallet Balance","description":"Retrieve the current balance of a respondent's wallet balance for display","operationId":"get_user_wallet_balance__product_id__wallet__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWalletBalanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/cashout_methods/":{"get":{"tags":["Wallet"],"summary":"Get Cashout Methods","description":"Retrieve the current available mechanisms that a user can use to retrieve funds.","operationId":"get_cashout_methods__product_id__cashout_methods__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashoutMethodsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Wallet"],"summary":"Create Cashout Method","description":"A user can only have 1 unique Cashout Method of any type at a time (eg. they can't create multiple paypal\npayout methods). Cashout Methods cannot be edited, they can only be created or deleted. Creating different\nCashout Methods will require type-dependent request data attributes in order to be successfully created.\n\nCurrently only creating paypal or Cash in Mail cashout methods are supported","operationId":"create_cashout_method__product_id__cashout_methods__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreatePayPalCashoutMethodRequest"},{"$ref":"#/components/schemas/CreateCashMailCashoutMethodRequest"}],"discriminator":{"propertyName":"type","mapping":{"PAYPAL":"#/components/schemas/CreatePayPalCashoutMethodRequest","CASH_IN_MAIL":"#/components/schemas/CreateCashMailCashoutMethodRequest"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashoutMethodResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/cashout_methods/{cashout_method_id}/":{"delete":{"tags":["Wallet"],"summary":"Delete Cashout Method","description":"Delete a cashout method","operationId":"delete_cashout_method__product_id__cashout_methods__cashout_method_id___delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"cashout_method_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"description":"The ID of the cashout method to delete","title":"Cashout Method Id"},"description":"The ID of the cashout method to delete"},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/cashout/":{"post":{"tags":["Wallet"],"summary":"Submit User Cashout","description":"Request a cashout taken from a user's available wallet balance, to be paid via a particular\ncashout method.","operationId":"submit_user_cashout__product_id__cashout__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCashoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashoutRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/cashout/{cashout_id}/":{"get":{"tags":["Wallet"],"summary":"Get Cashout Detail","description":"Retrieve the details for a specific Cashout event","operationId":"get_cashout_detail__product_id__cashout__cashout_id___get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"cashout_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"description":"The cashout event ID","title":"Cashout Id"},"description":"The cashout event ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashoutRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/transaction_history/":{"get":{"tags":["Wallet"],"summary":"Get User Transaction History","description":"Return array of user events that altered their wallet balance","operationId":"get_user_transaction_history__product_id__transaction_history__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"bpuid","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":128,"title":"Brokerage Product User ID","description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values.","examples":["app-user-9329ebd"]},"description":"A unique identifier for each user, which is set by the Supplier. Must be consistent across respondent entrances and unique to the platform. It should not contain any sensitive information like email or names, and should avoid using any incrementing values."},{"name":"created_after","in":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Filter transactions created after this timestamp","examples":["2025-01-01T04:20:00.000000Z"],"title":"Created After"},"description":"Filter transactions created after this timestamp"},{"name":"created_before","in":"query","required":false,"schema":{"type":"string","format":"date-time","description":"Filter transactions created before this timestamp","examples":["2026-02-17T00:46:04.851591Z"],"title":"Created Before"},"description":"Filter transactions created before this timestamp"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated fields to order by","examples":["-created","created"],"default":"created","title":"Order By"},"description":"Comma-separated fields to order by"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLedgerTransactionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{product_id}/cashout_method/{cashout_method_id}/value/":{"get":{"tags":["Wallet"],"summary":"Get Expected Redemption Value","description":"Use this function to get the \"value\" (in local currency, e.g. CAD, BTC) for this\n cashout_method, for amount (in USD cents).","operationId":"get_expected_redemption_value__product_id__cashout_method__cashout_method_id__value__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Brokerage Product ID","description":"The Brokerage Product ID provided by GRL.","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"description":"The Brokerage Product ID provided by GRL."},{"name":"cashout_method_id","in":"path","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"description":"The ID of the cashout method","examples":["0d363971792249b1a34586f092819e4b"],"title":"Cashout Method Id"},"description":"The ID of the cashout method"},{"name":"amount","in":"query","required":true,"schema":{"type":"integer","description":"(USD cents) The amount to convert","examples":[100],"title":"Amount"},"description":"(USD cents) The amount to convert"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashoutMethodForeignValueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/inventory/":{"get":{"tags":["Dashboard"],"summary":"Marketplace Inventory","operationId":"marketplace_inventory_dashboard_inventory__get","parameters":[{"name":"marketplace","in":"query","required":true,"schema":{"const":"WXET","type":"string","examples":["WXET"],"title":"Marketplace"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ws/debug/":{"get":{"tags":["Streams"],"summary":"Websocket Debug Page","operationId":"websocket_debug_page_ws_debug__get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","minLength":32,"maxLength":32,"title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ws/events/docs/":{"get":{"tags":["Streams"],"summary":"Websocket Events Docs","description":"WebSocket endpoint: `/ws/events/`\n\nProtocol:\n- Client connects\n- Client sends a SubscribeMessage `{ kind: \"subscribe\", product_id: \"{product_id}\" }`\n- Server sends a PingMessage `{ kind: \"ping\" }`\n- Client must reply a PongMessage: `{ kind: \"pong\" }`\n- Other messages are EventMessage or StatsMessage\n\nClose on missing pong after 20s.","operationId":"websocket_events_docs_ws_events_docs__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EventMessage"},{"$ref":"#/components/schemas/StatsMessage"},{"$ref":"#/components/schemas/PingMessage"},{"$ref":"#/components/schemas/SubscribeMessage"},{"$ref":"#/components/schemas/PongMessage"}],"title":"Response Websocket Events Docs Ws Events Docs Get"}}}}}}}},"components":{"schemas":{"AccountType":{"type":"string","enum":["bp_commission","bp_wallet","user_wallet","cash","revenue","expense","contest_wallet","credit_line","wa_wallet","wa_budget_pool","wa_held","wa_credit_line"],"title":"AccountType"},"AdjustmentType":{"properties":{"amount":{"type":"integer","title":"Amount","description":"The total amount (in USD cents) that the Brokerage Producthas earned within a respective time period from a specificSource of Tasks."},"adjustment":{"$ref":"#/components/schemas/SessionAdjustedStatus","description":" - `ac` = ADJUSTED_TO_COMPLETE\n - `af` = ADJUSTED_TO_FAIL\n - `pa` = PAYOUT_ADJUSTMENT","examples":["af"]}},"type":"object","required":["amount","adjustment"],"title":"AdjustmentType"},"AggregateBySource":{"properties":{"total":{"type":"integer","minimum":0.0,"title":"Total","default":0},"by_source":{"additionalProperties":{"type":"integer","minimum":0.0},"propertyNames":{"$ref":"#/components/schemas/Source"},"type":"object","title":"By Source"}},"type":"object","title":"AggregateBySource"},"AmtCashoutMethodData":{"properties":{"type":{"type":"string","const":"AMT","title":"Type","default":"AMT"}},"type":"object","title":"AmtCashoutMethodData"},"AuditLog":{"properties":{"id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Id"},"user_id":{"type":"integer","exclusiveMinimum":0.0,"title":"User Id"},"created":{"type":"string","format":"date-time","title":"Created","description":"When did this event occur","examples":["2026-02-17T00:46:02.709649Z"]},"level":{"$ref":"#/components/schemas/AuditLogLevel","description":"The level of importance for this event. Works the same as python logging levels. It is an integer 0 - 50, and implementers of this field could map it to the predefined levels: (`CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG`).This is NOT the same concept as the 'strength' of whatever event happened; it is just for sorting, filtering and display purposes. For e.g. multiple level 20 events != the 'importance' of one level 40 event.","examples":[30]},"event_type":{"type":"string","maxLength":64,"title":"Event Type","examples":["entrance-limit"]},"event_msg":{"anyOf":[{"type":"string","maxLength":256,"minLength":3},{"type":"null"}],"title":"Event Msg","description":"The event message. Could be displayed on user's page"},"event_value":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Event Value","description":"Optionally store a numeric value associated with this event. For e.g. if we recalculate the user's normalized recon rate, and it is 'high', we could store an event like (event_type='recon-rate', event_msg='higher than allowed recon rate' event_value=0.42)","examples":[0.42]}},"type":"object","required":["user_id","level","event_type"],"title":"AuditLog","description":"Table / Model for logging \"actions\" taken by a user or \"events\" that\nare related to a User"},"AuditLogLevel":{"type":"integer","enum":[50,50,40,30,30,20,10,0],"title":"AuditLogLevel"},"Body_offerwall_softpair_block_post__product_id__offerwall_7a89dcdb__offerwall_id___post":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/UserQuestionAnswerIn"},"type":"array","title":"Answers"}},"type":"object","required":["answers"],"title":"Body_offerwall_softpair_block_post__product_id__offerwall_7a89dcdb__offerwall_id___post"},"Body_offerwall_softpair_post__product_id__offerwall_37d1da64__offerwall_id___post":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/UserQuestionAnswerIn"},"type":"array","title":"Answers"}},"type":"object","required":["answers"],"title":"Body_offerwall_softpair_post__product_id__offerwall_37d1da64__offerwall_id___post"},"Body_submit_profiling_questions__product_id__profiling_questions__post":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/UserQuestionAnswerIn"},"type":"array","title":"Answers"}},"type":"object","required":["answers"],"title":"Body_submit_profiling_questions__product_id__profiling_questions__post"},"BrokerageProductPayoutEvent":{"properties":{"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Payout Event Unique Identifier","examples":["9453cd076713426cb68d05591c7145aa"]},"debit_account_uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Debit Account Uuid","description":"The LedgerAccount.uuid that money is being requested from. Thie User or Brokerage Product is retrievable through the LedgerAccount.reference_uuid","examples":["18298cb1583846fbb06e4747b5310693"]},"cashout_method_uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Cashout Method Uuid","description":"References a row in the account_cashoutmethod table. This is the cashout method that was used to request this payout. (A cashout is the same thing as a payout)","examples":["a6dc1fc1bf934557b952f253dee12813"]},"created":{"type":"string","format":"date-time","title":"Created"},"amount":{"type":"integer","exclusiveMaximum":9.223372036854776e+18,"exclusiveMinimum":0.0,"title":"Amount","description":"The USDCent amount int. This cannot be 0 or negative","examples":[531]},"status":{"anyOf":[{"$ref":"#/components/schemas/PayoutStatus"},{"type":"null"}],"description":" - `PENDING` = PENDING\n - `APPROVED` = APPROVED\n - `REJECTED` = REJECTED\n - `CANCELLED` = CANCELLED\n - `FAILED` = FAILED\n - `COMPLETE` = COMPLETE","default":"PENDING","examples":["COMPLETE"]},"ext_ref_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ext Ref Id"},"payout_type":{"$ref":"#/components/schemas/PayoutType","description":" - `PAYPAL` = PAYPAL\n - `TANGO` = TANGO\n - `DWOLLA` = DWOLLA\n - `ACH` = ACH\n - `WIRE` = WIRE\n - `CASH_IN_MAIL` = CASH_IN_MAIL\n - `PRIZE` = PRIZE\n - `AMT` = AMT\n - `AMT_BONUS` = AMT_BONUS\n - `AMT_ASSIGNMENT` = AMT_HIT","examples":["ACH"]},"request_data":{"additionalProperties":true,"type":"object","title":"Request Data","description":"Stores payout-type-specific information that is used to request this payout from the external provider."},"order_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"$ref":"#/components/schemas/CashMailOrderData"},{"type":"null"}],"title":"Order Data","description":"Stores payout-type-specific order information that is returned from the external payout provider."},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","description":"The Brokerage Product that was paid out","examples":["1108d053e4fa47c5b0dbdcd03a7981e7"]},"method":{"$ref":"#/components/schemas/PayoutType","description":" - `PAYPAL` = PAYPAL\n - `TANGO` = TANGO\n - `DWOLLA` = DWOLLA\n - `ACH` = ACH\n - `WIRE` = WIRE\n - `CASH_IN_MAIL` = CASH_IN_MAIL\n - `PRIZE` = PRIZE\n - `AMT` = AMT\n - `AMT_BONUS` = AMT_BONUS\n - `AMT_ASSIGNMENT` = AMT_HIT","readOnly":true,"examples":["ACH"]},"amount_usd":{"type":"integer","minimum":0.0,"title":"Amount Usd","readOnly":true,"examples":["$10,000.000"]},"amount_usd_str":{"type":"string","title":"Amount Usd Str","readOnly":true,"examples":["$10,000.000"]}},"type":"object","required":["debit_account_uuid","cashout_method_uuid","amount","payout_type","product_id","method","amount_usd","amount_usd_str"],"title":"BrokerageProductPayoutEvent","description":"The amount\n\n- created: When the Brokerage Product was paid out"},"BucketTask":{"properties":{"id":{"type":"string","maxLength":32,"minLength":1,"title":"Id","description":"The internal task id for this task within the marketplace","examples":["6ov9jz3"]},"id_code":{"type":"string","maxLength":35,"minLength":3,"pattern":"^[a-z]{1,2}\\:.*","title":"Id Code","description":"The namespaced task id for this task within the marketplace","examples":["o:6ov9jz3"]},"source":{"$ref":"#/components/schemas/Source","examples":["o"]},"loi":{"type":"integer","maximum":5400.0,"exclusiveMinimum":1.0,"title":"Loi","description":"expected loi in seconds","examples":[612]},"payout":{"type":"integer","exclusiveMinimum":1.0,"title":"Payout","description":"integer cents","examples":[123]}},"type":"object","required":["id","id_code","source","loi","payout"],"title":"BucketTask","description":"This represents one of the \"tasks\" within a bucket's ordered list of tasks."},"Cardinality":{"type":"string","enum":["*","?"],"title":"Cardinality"},"CashMailCashoutMethodData":{"properties":{"type":{"type":"string","const":"CASH_IN_MAIL","title":"Type","default":"CASH_IN_MAIL"},"delivery_address":{"$ref":"#/components/schemas/USDeliveryAddress","description":"Delivery address where payment should be sent"}},"type":"object","required":["delivery_address"],"title":"CashMailCashoutMethodData"},"CashMailOrderData":{"properties":{"type":{"type":"string","const":"CASH_IN_MAIL","title":"Type","default":"CASH_IN_MAIL"},"shipping_cost":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Shipping Cost","description":"(USD cents) The shipping cost. This amount get charged to the BP."},"tracking_number":{"anyOf":[{"type":"string","maxLength":50,"minLength":1},{"type":"null"}],"title":"Tracking Number"},"shipping_method":{"anyOf":[{"$ref":"#/components/schemas/ShippingMethod","maxLength":50,"minLength":1},{"type":"null"}],"description":"Standard, express, etc."},"carrier":{"anyOf":[{"$ref":"#/components/schemas/ShippingCarrier","maxLength":50,"minLength":1},{"type":"null"}],"description":"Name of the shipping company, e.g., USPS, FedEx, DHL"},"ship_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ship Date"},"estimated_delivery_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Estimated Delivery Date"},"delivery_status":{"anyOf":[{"$ref":"#/components/schemas/DeliveryStatus","maxLength":50,"minLength":1},{"type":"null"}],"description":"Current status of delivery, e.g., pending, in transit, delivered"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated","description":"Timestamp of the last status update"}},"type":"object","required":["shipping_cost"],"title":"CashMailOrderData"},"CashoutMethodForeignValue":{"properties":{"value":{"type":"integer","minimum":0.0,"title":"Value","description":"Value of the redemption in the currency's smallest unit."},"currency":{"$ref":"#/components/schemas/RedemptionCurrency","description":"Supported Currencies for Foreign Redemptions\n\nAllowed values: \n - __USD__ *(USD)*: US Dollars. Smallest Unit: Cents.\n - __CAD__ *(CAD)*: Canadian Dollars. Smallest Unit: Cents.\n - __GBP__ *(GBP)*: British Pounds. Smallest Unit: Pence.\n - __EUR__ *(EUR)*: Euros. Smallest Unit: Cents.\n - __INR__ *(INR)*: Indian Rupees. Smallest Unit: Paise.\n - __AUD__ *(AUD)*: Australian Dollars. Smallest Unit: Cents.\n - __PLN__ *(PLN)*: Polish Zloty. Smallest Unit: Grosz.\n - __SEK__ *(SEK)*: Swedish Krona. Smallest Unit: Öre.\n - __SGD__ *(SGD)*: Singapore Dollars. Smallest Unit: Cents.\n - __MXN__ *(MXN)*: Mexican Pesos. Smallest Unit: Centavos."},"value_string":{"type":"string","title":"Value String","description":"A string representation of the value in the currency."}},"type":"object","required":["value","currency","value_string"],"title":"CashoutMethodForeignValue","description":"Shows the expected value of a redemption in a foreign currency.","example":{"currency":"CAD","value":"138","value_string":"$1.38 CAD"}},"CashoutMethodForeignValueResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"cashout_method_value":{"$ref":"#/components/schemas/CashoutMethodForeignValue"}},"type":"object","required":["status","cashout_method_value"],"title":"CashoutMethodForeignValueResponse"},"CashoutMethodOut":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique ID for this cashout method"},"currency":{"type":"string","const":"USD","title":"Currency","description":"The currency of the cashout. Only USD is supported.","default":"USD"},"original_currency":{"anyOf":[{"$ref":"#/components/schemas/Currency"},{"type":"null"}],"description":"The base currency of the money paid out. This is used for e.g. sending an Amazon UK gift card"},"data":{"oneOf":[{"$ref":"#/components/schemas/PaypalCashoutMethodData"},{"$ref":"#/components/schemas/TangoCashoutMethodData"},{"$ref":"#/components/schemas/CashMailCashoutMethodData"},{"$ref":"#/components/schemas/AmtCashoutMethodData"}],"title":"Data","discriminator":{"propertyName":"type","mapping":{"AMT":"#/components/schemas/AmtCashoutMethodData","CASH_IN_MAIL":"#/components/schemas/CashMailCashoutMethodData","PAYPAL":"#/components/schemas/PaypalCashoutMethodData","TANGO":"#/components/schemas/TangoCashoutMethodData"}}},"description":{"type":"string","title":"Description","description":"The description of the cashout method.","default":""},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url","description":"Link to an image to display"},"max_value":{"type":"integer","exclusiveMinimum":0.0,"title":"Max Value","description":"(In lowest unit of the original_currency), The maximum amount that can be cashed out in one transaction."},"min_value":{"type":"integer","minimum":0.0,"title":"Min Value","description":"(In lowest unit of the original_currency), The minimum amount that can be cashed out in one transaction."},"name":{"type":"string","title":"Name","description":"A descriptive name for the cashout method."},"type":{"$ref":"#/components/schemas/PayoutType","description":"The method in which the requested payout is delivered.\n\nAllowed values: \n - __PAYPAL__ *(PAYPAL)*: User is paid out to their personal PayPal email address\n - __TANGO__ *(TANGO)*: User is paid uut via a Tango Gift Card\n - __DWOLLA__ *(DWOLLA)*: DWOLLA\n - __ACH__ *(ACH)*: A payment is made to a bank account using ACH\n - __WIRE__ *(WIRE)*: A payment is made to a bank account using ACH\n - __CASH_IN_MAIL__ *(CASH_IN_MAIL)*: A payment is made in cash and mailed to the user.\n - __PRIZE__ *(PRIZE)*: A payment is made as a prize with some monetary value\n - __AMT__ *(AMT)*: This is used to designate either AMT_BONUS or AMT_HIT\n - __AMT_BONUS__ *(AMT_BONUS)*: Amazon Mechanical Turk as a Bonus\n - __AMT_ASSIGNMENT__ *(AMT_HIT)*: Amazon Mechanical Turk for a HIT"},"ext_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ext Id","description":"An external ID. Can be shown to a user to disambiguate a user's possibly multiple methods"},"usd_exchange_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usd Exchange Rate"},"max_value_usd":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Value Usd","description":"(In lowest unit of USD), The maximum amount that can be cashed out in one transaction."},"min_value_usd":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Value Usd","description":"(In lowest unit of USD), The minimum amount that can be cashed out in one transaction."},"product_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Product Id","examples":["4fe381fb7186416cb443a38fa66c6557"]},"product_user_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":3},{"type":"null"}],"title":"Product User Id","description":"A unique identifier for each user, which is set by the Supplier. It should not contain any sensitive informationlike email or names, and should avoid using anyincrementing values.","examples":["app-user-9329ebd"]}},"type":"object","required":["id","data","max_value","min_value","name","type"],"title":"CashoutMethodOut","example":{"bpid":"4a3ddfb747344bbc93efadf1c3a16e1a","currency":"USD","data":{"disclaimer":"...","terms":"..."},"description":"...","id":"941d489c3ce04eb39a0ddb7f8f75db74","image_url":"https://d30s7yzk2az89n.cloudfront.net/images/brands/b238587-1200w-326ppi.png","max_value":25000,"min_value":500,"name":"Visa® Prepaid Card USD","type":"TANGO"}},"CashoutMethodResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"cashout_method":{"$ref":"#/components/schemas/CashoutMethodOut"}},"type":"object","required":["status","cashout_method"],"title":"CashoutMethodResponse"},"CashoutMethodsResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"cashout_methods":{"items":{"$ref":"#/components/schemas/CashoutMethodOut"},"type":"array","title":"Cashout Methods"}},"type":"object","required":["status","cashout_methods"],"title":"CashoutMethodsResponse"},"CashoutRequestInfo":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Id","description":"Unique ID for this cashout. This may be NULL if the status is REJECTED or FAILED, which may happen if the request is invalid.","examples":["3ceb847aaf9f40f4bd15b2b5e083abf6"]},"description":{"type":"string","title":"Description","description":"This is the name of the cashout method.","examples":["Visa® Prepaid Card USD"]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"status":{"anyOf":[{"$ref":"#/components/schemas/PayoutStatus"},{"type":"null"}],"description":" - `PENDING` = PENDING\n - `APPROVED` = APPROVED\n - `REJECTED` = REJECTED\n - `CANCELLED` = CANCELLED\n - `FAILED` = FAILED\n - `COMPLETE` = COMPLETE","default":"PENDING","examples":["PENDING"]},"transaction_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Transaction Info"}},"type":"object","required":["id","description"],"title":"CashoutRequestInfo","description":"See models.thl.payout: PayoutEvent. We've confused a CashOut and a\nPayout. This is used only in the API response."},"CashoutRequestResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"cashout":{"$ref":"#/components/schemas/CashoutRequestInfo"}},"type":"object","required":["status","cashout"],"title":"CashoutRequestResponse"},"Category":{"properties":{"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid","examples":["30fad401c93c438cae1cffecb046fd3e"]},"adwords_vertical_id":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Adwords Vertical Id"},"label":{"type":"string","maxLength":255,"title":"Label","examples":["Hair Loss"]},"path":{"type":"string","pattern":"^\\/.*[^\\/]$","title":"Path","examples":["/Beauty & Fitness/Hair Care/Hair Loss"]},"parent_uuid":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Parent Uuid","examples":["d52f3e2354ef434e9c89704fe1fb6018"]}},"type":"object","required":["uuid","label","path"],"title":"Category"},"CategoryAssociation":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"The category ID","examples":["c8642a1b86d9460cbe8f7e8ae6e56ee4"]},"label":{"type":"string","maxLength":255,"title":"Label","description":"The category label","examples":["People & Society"]},"adwords_id":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Adwords Id","examples":["14"]},"adwords_label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Adwords Label","examples":["People & Society"]},"p":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P","description":"The strength of the association of this bucketwith this category. Will sum to 1 within a bucket.","examples":[1.0]}},"type":"object","required":["id","label","p"],"title":"CategoryAssociation","description":"Used in an offerwall. Stores the association between a category\nand a bucket, with a score."},"ContestEndCondition":{"properties":{"target_entry_amount":{"anyOf":[{"anyOf":[{"type":"integer","minimum":0.0},{"type":"integer","exclusiveMinimum":0.0}],"ge":1},{"type":"null"}],"title":"Target Entry Amount","description":"The contest is over once this amount is reached. (sum of all entry amount)"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At","description":"The contest is over at this time."}},"type":"object","title":"ContestEndCondition","description":"Defines the conditions to evaluate to determine when the contest is over.\nMultiple conditions can be set. The contest is over once ANY conditions are met."},"ContestEndReason":{"type":"string","enum":["cancelled","target_entry_amount","ends_at","max_winners"],"title":"ContestEndReason","description":"Defines why a contest ended"},"ContestEntryRule":{"properties":{"max_entry_amount_per_user":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Entry Amount Per User","description":"Maximum total value of entries per user"},"max_daily_entries_per_user":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Daily Entries Per User","description":"Maximum entries per user allowed per day for this contest"},"min_completes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Completes"},"min_membership_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Membership Level"},"id_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Id Verified"}},"type":"object","title":"ContestEntryRule","description":"Defines rules the user must meet to be allowed to enter this contest\nOnly applies if the ContestType is ENTRY!"},"ContestEntryTrigger":{"type":"string","enum":["task_complete","task_attempt","referral"],"title":"ContestEntryTrigger","description":"Defines what action/event triggers a (possible) entry into the contest (automatically).\nThis only is valid on milestone contests"},"ContestPrize":{"properties":{"kind":{"$ref":"#/components/schemas/ContestPrizeKind","description":"\nAllowed values: \n - __physical__ *(PHYSICAL)*: A physical prize (e.g. a iPhone, cash in the mail, dinner with Max)\n - __promotion__ *(PROMOTION)*: A promotion is a temporary or special offer that provides extra value or benefits (e.g. 20% bonus on completes for the next 7 days)\n - __cash__ *(CASH)*: Money is deposited into user's virtual wallet"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"estimated_cash_value":{"type":"integer","minimum":0.0,"title":"Estimated Cash Value","description":"Estimated cash value of prize in USDCents"},"cash_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Cash Amount","description":"If the kind=ContestPrizeKind.CASH, this is the amount of the prize"},"promotion_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Promotion Id","description":"If the kind=ContestPrizeKind.PROMOTION, this is the promotion ID"},"leaderboard_rank":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Leaderboard Rank","description":"The prize is for achieving this rank in the associated leaderboard. The highest rank is 1."}},"type":"object","required":["kind","estimated_cash_value"],"title":"ContestPrize"},"ContestPrizeKind":{"type":"string","enum":["physical","promotion","cash"],"title":"ContestPrizeKind"},"ContestStatus":{"type":"string","enum":["active","completed","cancelled"],"title":"ContestStatus"},"ContestWinner":{"properties":{"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this user won this prize"},"prize":{"$ref":"#/components/schemas/ContestPrize"},"awarded_cash_amount":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Awarded Cash Amount","description":"The actual amount this user receives. For cash prizes, if there was a tie, this could be different from the prize amount."},"product_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product User Id","readOnly":true}},"type":"object","required":["prize","product_user_id"],"title":"ContestWinner","description":"In a Raffle, the ContestEntryType can be COUNT or CASH. In the CASH type, the unit\nof entry is 1 USDCent (one penny). Implicitly, each penny entered buys 1 entry\ninto the raffle, and one entry is randomly selected for each prize.\n\nA contest should have as many winners as there are prizes\nspecial case 1: there are fewer entries than prizes\nspecial case 2: leaderboard contest with ties"},"CountStat":{"properties":{"facet":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"propertyNames":{"enum":["country_iso","day","month"]},"type":"object","title":"Facet","description":"The grouping criteria","examples":[{"country_iso":"us"}]},"count":{"type":"integer","title":"Count","description":"The count value for the given metric and facet"}},"type":"object","required":["facet","count"],"title":"CountStat"},"CreateCashMailCashoutMethodRequest":{"properties":{"bpuid":{"type":"string","maxLength":128,"minLength":3,"title":"Bpuid","description":"(product_user_id) The user to create this cashout method for.","examples":["app-user-9329ebd"]},"type":{"type":"string","const":"CASH_IN_MAIL","title":"Type","default":"CASH_IN_MAIL"},"delivery_address":{"$ref":"#/components/schemas/USDeliveryAddress","description":"Delivery address where payment should be sent"}},"type":"object","required":["bpuid","delivery_address"],"title":"CreateCashMailCashoutMethodRequest"},"CreateCashoutRequest":{"properties":{"bpuid":{"type":"string","maxLength":128,"minLength":3,"title":"Bpuid","description":"(product_user_id) The user requesting a cashout.","examples":["app-user-9329ebd"]},"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"(USD cents) The amount requested for the cashout.","examples":[531]},"cashout_method_id":{"type":"string","maxLength":32,"minLength":32,"title":"Cashout Method Id","description":"Unique ID for the cashout method the cashout is being requested with.","examples":["941d489c3ce04eb39a0ddb7f8f75db74"]}},"type":"object","required":["bpuid","amount","cashout_method_id"],"title":"CreateCashoutRequest"},"CreatePayPalCashoutMethodRequest":{"properties":{"bpuid":{"type":"string","maxLength":128,"minLength":3,"title":"Bpuid","description":"(product_user_id) The user to create this cashout method for.","examples":["app-user-9329ebd"]},"type":{"type":"string","const":"PAYPAL","title":"Type","default":"PAYPAL"},"email":{"type":"string","format":"email","title":"Email","description":"Email address of the paypal user","examples":["test@example.com"]}},"type":"object","required":["bpuid","email"],"title":"CreatePayPalCashoutMethodRequest"},"Currency":{"type":"string","enum":["USD","CAD","GBP","EUR","INR","AUD","PLN","SEK","SGD","MXN"],"title":"Currency"},"DeliveryStatus":{"type":"string","enum":["Pending","Shipped","In Transit","Out for Delivery","Delivered","Returned","Canceled","Failed Attempt","Lost"],"title":"DeliveryStatus"},"Direction":{"type":"integer","enum":[-1,1],"title":"Direction","description":"Entries on the debit side will increase debit normal accounts, while\nentries on the credit side will decrease them. Conversely, entries on\nthe credit side will increase credit normal accounts, while entries on\nthe debit side will decrease them.\n\nBy convention (?), the db will store transactions as debit-normal. For\na credit-normal account, we should flip the signs."},"DurationSummary":{"properties":{"min":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Min"},"max":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Max"},"mean":{"anyOf":[{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Mean"},"q1":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Q1"},"q2":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Q2"},"q3":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Q3"},"lower_whisker":{"type":"integer","title":"Lower Whisker","readOnly":true},"upper_whisker":{"type":"integer","title":"Upper Whisker","readOnly":true}},"type":"object","required":["min","max","q1","q2","q3","lower_whisker","upper_whisker"],"title":"DurationSummary","description":"Durations are in integer seconds.\nDescribes the statistical distribution of expected durations of tasks within this bucket.","examples":[{"max":1180,"mean":660,"min":112,"q1":457,"q2":650,"q3":1103}]},"EventEnvelope":{"properties":{"event_uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Event Uuid"},"event_type":{"$ref":"#/components/schemas/EventType"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"version":{"type":"integer","title":"Version","default":1},"product_user_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":3},{"type":"null"}],"title":"Product User Id","description":"A unique identifier for each user. This is hidden unlessthe event is for the requesting user.","examples":["app-user-9329ebd"]},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","examples":["4fe381fb7186416cb443a38fa66c6557"]},"payload":{"oneOf":[{"$ref":"#/components/schemas/TaskEnterPayload"},{"$ref":"#/components/schemas/TaskFinishPayload"},{"$ref":"#/components/schemas/SessionEnterPayload"},{"$ref":"#/components/schemas/SessionFinishPayload"}],"title":"Payload","discriminator":{"propertyName":"event_type","mapping":{"session.enter":"#/components/schemas/SessionEnterPayload","session.finish":"#/components/schemas/SessionFinishPayload","task.enter":"#/components/schemas/TaskEnterPayload","task.finish":"#/components/schemas/TaskFinishPayload"}}}},"type":"object","required":["event_type","product_id","payload"],"title":"EventEnvelope"},"EventMessage":{"properties":{"kind":{"type":"string","const":"event","title":"Kind","default":"event"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"data":{"$ref":"#/components/schemas/EventEnvelope"}},"type":"object","required":["data"],"title":"EventMessage"},"EventType":{"type":"string","enum":["task.enter","task.finish","session.enter","session.finish","wallet.credit","wallet.debit","user.created","user.active"],"title":"EventType"},"GeoIPInformation":{"properties":{"geoname_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Geoname Id"},"continent_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Continent Code"},"continent_name":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Continent Name"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso","description":"The ISO code of the country associated with the IP address.","examples":["jm"]},"country_name":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Country Name"},"subdivision_1_iso":{"anyOf":[{"type":"string","maxLength":3},{"type":"null"}],"title":"Subdivision 1 Iso","description":"The ISO code of the primary subdivision (e.g., state or province)."},"subdivision_1_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subdivision 1 Name","description":"The name of the primary subdivision (e.g., state or province)."},"subdivision_2_iso":{"anyOf":[{"type":"string","maxLength":3},{"type":"null"}],"title":"Subdivision 2 Iso","description":"The ISO code of the secondary subdivision (if applicable)."},"subdivision_2_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subdivision 2 Name","description":"The name of the secondary subdivision (if applicable)."},"city_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City Name","description":"The name of the city associated with the IP address.","examples":["Jamestown"]},"metro_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Metro Code"},"time_zone":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Time Zone","description":"The time zone associated with the geographical location.","examples":["Europe/Madrid"]},"is_in_european_union":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is In European Union"},"updated":{"type":"string","format":"date-time","title":"Updated"},"ip":{"type":"string","title":"Ip"},"registered_country_iso":{"anyOf":[{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$"},{"type":"null"}],"title":"Registered Country Iso","description":"The ISO code of the country where the IP address is registered.","examples":["sm"]},"is_anonymous":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Anonymous","description":"Indicates whether the IP address is associated with an anonymous source (e.g., VPN, proxy).","examples":[false]},"is_anonymous_vpn":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Anonymous Vpn"},"is_hosting_provider":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hosting Provider"},"is_public_proxy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public Proxy"},"is_tor_exit_node":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Tor Exit Node"},"is_residential_proxy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Residential Proxy"},"autonomous_system_number":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Autonomous System Number"},"autonomous_system_organization":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Autonomous System Organization"},"domain":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Domain"},"isp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Isp","description":"The Internet Service Provider associated with the IP address.","examples":["Comcast"]},"mobile_country_code":{"anyOf":[{"type":"string","maxLength":3},{"type":"null"}],"title":"Mobile Country Code"},"mobile_network_code":{"anyOf":[{"type":"string","maxLength":3},{"type":"null"}],"title":"Mobile Network Code"},"network":{"anyOf":[{"type":"string","maxLength":56},{"type":"null"}],"title":"Network"},"organization":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Organization"},"static_ip_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Static Ip Score","description":"A score indicating the likelihood that the IP address is static."},"user_type":{"anyOf":[{"$ref":"#/components/schemas/UserType"},{"type":"null"}],"description":"The type of user associated with the IP address (e.g., 'residential', 'business').","examples":["school"]},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","description":"The postal code associated with the IP address.","examples":["13245"]},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"The latitude coordinate of the IP address location.","examples":[10.031844]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"The longitude coordinate of the IP address location.","examples":[-20.111975]},"accuracy_radius":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Accuracy Radius","description":"The approximate radius of accuracy for the latitude and longitude, in kilometers.","examples":[167]}},"type":"object","required":["country_iso","ip"],"title":"GeoIPInformation"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IntegrationMode":{"type":"string","enum":["platform","pass_through"],"title":"IntegrationMode"},"Leaderboard":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique ID for this leaderboard","examples":["845b0074ad533df580ebb9c80cc3bce1"]},"name":{"type":"string","title":"Name","description":"Descriptive name for the leaderboard based on the board_code","examples":["Number of Completes"]},"board_code":{"$ref":"#/components/schemas/LeaderboardCode","description":"The type of leaderboard. What the \"values\" represent.\n\nAllowed values: \n - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes\n - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout\n - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts","examples":["complete_count"]},"bpid":{"type":"string","maxLength":32,"minLength":32,"title":"Bpid","description":"product_id","examples":["4fe381fb7186416cb443a38fa66c6557"]},"country_iso":{"type":"string","title":"Country Iso","description":"The country this leaderboard is for.","examples":["us"]},"freq":{"$ref":"#/components/schemas/LeaderboardFrequency","description":"The time period range for the leaderboard.\n\nAllowed values: \n - __daily__ *(DAILY)*: UTC midnight to UTC midnight\n - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC\n - __monthly__ *(MONTHLY)*: Jan 1 00:00:00","examples":["daily"]},"timezone_name":{"type":"string","title":"Timezone Name","description":"The timezone for the requested country","examples":["America/New_York"]},"sort_order":{"type":"string","enum":["ascending","descending"],"title":"Sort Order","default":"descending"},"row_count":{"type":"integer","minimum":0.0,"title":"Row Count","description":"The total number of rows in the leaderboard.","examples":[2]},"rows":{"items":{"$ref":"#/components/schemas/LeaderboardRow"},"type":"array","title":"Rows","examples":[[{"bpuid":"app-user-9329ebd","rank":1,"value":4},{"bpuid":"app-user-7923skw","rank":2,"value":3}]]},"period_start_local":{"type":"string","format":"date-time","title":"Period Start Local","description":"The start of the time period covered by this board in local time, tz-aware","examples":["2024-07-12T00:00:00-04:00"]},"period_end_local":{"type":"string","format":"date-time","title":"Period End Local","description":"The end of the time period covered by this board in local time, tz-aware","examples":["2024-07-12T23:59:59.999999-04:00"]},"start_timestamp":{"type":"integer","title":"Start Timestamp","description":"(unix timestamp) The start time of the time range this leaderboard covers.","readOnly":true,"examples":[1720756800]},"end_timestamp":{"type":"integer","title":"End Timestamp","description":"(unix timestamp) The end time of the time range this leaderboard covers.","readOnly":true,"examples":[1720843199]},"utc_offset":{"type":"string","title":"Utc Offset","description":"The UTC offset for the timezone","readOnly":true,"examples":["-0400"]},"local_start_time":{"type":"string","title":"Local Start Time","description":"The start time of the time range this leaderboard covers (local time, in the leaderboard's timezone).","readOnly":true,"examples":["2024-07-12T00:00:00-04:00"]},"local_end_time":{"type":"string","title":"Local End Time","description":"The end time of the time range this leaderboard covers (local time, in the leaderboard's timezone).","readOnly":true,"examples":["2024-07-12T23:59:59.999999-04:00"]},"start_end_str":{"type":"string","title":"Start End Str","description":"A formatted string for time period covered by this leaderboard. Can be used to display to users.","readOnly":true,"examples":["2024-02-07 to 2024-02-08"]}},"type":"object","required":["board_code","bpid","country_iso","freq","row_count","period_start_local","start_timestamp","end_timestamp","utc_offset","local_start_time","local_end_time","start_end_str"],"title":"Leaderboard","description":"A leaderboard exists independently for each product_id in each country.\nEach country is associated with a single timezone. There is a daily,\nweekly, and monthly leaderboard."},"LeaderboardCode":{"type":"string","enum":["complete_count","largest_user_payout","sum_user_payout"],"title":"LeaderboardCode","description":"The type of leaderboard. What the \"values\" represent."},"LeaderboardContestUserView":{"properties":{"name":{"type":"string","maxLength":128,"title":"Name","description":"Name of contest. Can be displayed to user."},"description":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Description","description":"Description of contest. Can be displayed to user."},"contest_type":{"type":"string","const":"leaderboard","title":"Contest Type","default":"leaderboard"},"end_condition":{"$ref":"#/components/schemas/ContestEndCondition"},"prizes":{"items":{"$ref":"#/components/schemas/ContestPrize"},"type":"array","minItems":1,"title":"Prizes"},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"When the contest starts"},"terms_and_conditions":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Terms And Conditions"},"status":{"$ref":"#/components/schemas/ContestStatus","default":"active"},"country_isos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Isos","description":"Contest is restricted to these countries. If null, all countries are allowed"},"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid"},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","description":"Contest applies only to a single BP"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this contest was created"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When this contest was last modified. Does not include entries being created/modified"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the contest ended"},"end_reason":{"anyOf":[{"$ref":"#/components/schemas/ContestEndReason"},{"type":"null"}],"description":"The reason the contest ended"},"product_user_id":{"type":"string","title":"Product User Id"},"user_winnings":{"items":{"$ref":"#/components/schemas/ContestWinner"},"type":"array","title":"User Winnings","description":"The prizes won in this contest by the requested user"},"leaderboard_key":{"type":"string","title":"Leaderboard Key","description":"The specific leaderboard instance this contest is connected to","examples":["leaderboard:7a9d8d02334449ceb105764f77e1ba97:us:weekly:2025-05-26:complete_count"]},"tie_break_strategy":{"type":"string","const":"split_prize_pool","title":"Tie Break Strategy","default":"split_prize_pool"},"country_iso":{"type":"string","title":"Country Iso","readOnly":true},"user_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Rank","description":"The current rank of this user in this contest","readOnly":true}},"additionalProperties":false,"type":"object","required":["name","product_id","product_user_id","leaderboard_key","country_iso","user_rank"],"title":"LeaderboardContestUserView","example":{"contest_type":"leaderboard","country_iso":"us","country_isos":"us","created_at":"2026-02-18T07:03:18.635186Z","description":"$15 1st place, $10 2nd, $5 3rd place US weekly","end_condition":{"ends_at":"2025-06-02T05:29:59.999999Z"},"leaderboard_key":"leaderboard:1108d053e4fa47c5b0dbdcd03a7981e7:us:weekly:2025-05-26:complete_count","name":"Prizes for top survey takers this week","prizes":[{"cash_amount":1500,"estimated_cash_value":1500,"kind":"cash","leaderboard_rank":1,"name":"$15 Cash"},{"cash_amount":1000,"estimated_cash_value":1000,"kind":"cash","leaderboard_rank":2,"name":"$10 Cash"},{"cash_amount":500,"estimated_cash_value":500,"kind":"cash","leaderboard_rank":3,"name":"$5 Cash"}],"product_id":"1108d053e4fa47c5b0dbdcd03a7981e7","product_user_id":"test-user","starts_at":"2026-02-18T07:03:18.635162Z","status":"active","tie_break_strategy":"split_prize_pool","updated_at":"2026-02-18T07:03:18.635187Z","user_winnings":[],"uuid":"6adfa26d2b044cfa8bf0622041ee7c96"}},"LeaderboardFrequency":{"type":"string","enum":["daily","weekly","monthly"],"title":"LeaderboardFrequency","description":"The time period range for the leaderboard."},"LeaderboardResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"leaderboard":{"$ref":"#/components/schemas/Leaderboard"}},"type":"object","required":["status","leaderboard"],"title":"LeaderboardResponse"},"LeaderboardRow":{"properties":{"bpuid":{"type":"string","title":"Bpuid","description":"product_user_id","examples":["app-user-9329ebd"]},"rank":{"type":"integer","title":"Rank","description":"The numerical data ranks (1 through n) of the values. Ties are ranked using the lowest rank in the group.","examples":[1]},"value":{"type":"integer","title":"Value","description":"The value. The meaning of the value is dependent on the LeaderboardCode.","examples":[7]}},"type":"object","required":["bpuid","rank","value"],"title":"LeaderboardRow"},"LeaderboardWinner":{"properties":{"rank":{"type":"integer","title":"Rank","description":"The user's final rank in the leaderboard","examples":[1]},"freq":{"$ref":"#/components/schemas/LeaderboardFrequency","description":"The time period range for the leaderboard.\n\nAllowed values: \n - __daily__ *(DAILY)*: UTC midnight to UTC midnight\n - __weekly__ *(WEEKLY)*: Sunday Midnight to Sunday Midnight UTC\n - __monthly__ *(MONTHLY)*: Jan 1 00:00:00","examples":["daily"]},"board_code":{"$ref":"#/components/schemas/LeaderboardCode","description":"The type of leaderboard. What the \"values\" represent.\n\nAllowed values: \n - __complete_count__ *(COMPLETE_COUNT)*: Number of Completes\n - __largest_user_payout__ *(LARGEST_PAYOUT)*: Largest Single Payout\n - __sum_user_payout__ *(SUM_PAYOUTS)*: (Sum of) Total Payouts","examples":["complete_count"]},"country_iso":{"type":"string","title":"Country Iso","description":"The country this leaderboard is for.","examples":["us"]},"issued":{"type":"string","format":"date-time","title":"Issued","description":"When the prize was issued.","examples":["2022-10-17T05:59:14.570231Z"]},"bpuid":{"type":"string","title":"Bpuid","description":"product_user_id","examples":["app-user-9329ebd"]},"description":{"type":"string","title":"Description","examples":["Bonus for daily contest"]},"amount":{"type":"integer","title":"Amount","description":"(USD cents) The reward amount","examples":[1000]},"amount_str":{"type":"string","title":"Amount Str","description":"The amount as a formatted string in USD. Can be displayed to the user.","examples":["$10.00"]},"contest_start":{"type":"string","format":"date-time","title":"Contest Start","description":"When the leaderboard started","examples":["2022-10-16T04:00:00Z"]},"contest_end":{"type":"string","format":"date-time","title":"Contest End","description":"When the leaderboard ended","examples":["2022-10-17T04:00:00Z"]}},"type":"object","required":["rank","freq","board_code","country_iso","issued","bpuid","description","amount","amount_str","contest_start","contest_end"],"title":"LeaderboardWinner"},"LeaderboardWinnerResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"winners":{"items":{"$ref":"#/components/schemas/LeaderboardWinner"},"type":"array","title":"Winners"}},"type":"object","required":["status"],"title":"LeaderboardWinnerResponse"},"LedgerAccount":{"properties":{"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid","description":"A unique identifier for this Ledger Account","examples":["c3c3566b5b1b4961b63a5670a2dc923d"]},"display_name":{"type":"string","maxLength":64,"title":"Display Name","description":"Human-readable description of the Ledger Account","examples":["BP Wallet c3c3566b5b1b4961b63a5670a2dc923d"]},"qualified_name":{"type":"string","maxLength":255,"title":"Qualified Name"},"account_type":{"$ref":"#/components/schemas/AccountType","description":" - `bp_commission` = BP_COMMISSION\n - `bp_wallet` = BP_WALLET\n - `user_wallet` = USER_WALLET\n - `cash` = CASH\n - `revenue` = REVENUE\n - `expense` = EXPENSE\n - `contest_wallet` = CONTEST_WALLET\n - `credit_line` = CREDIT_LINE\n - `wa_wallet` = WA_WALLET\n - `wa_budget_pool` = WA_BUDGET_POOL\n - `wa_held` = WA_HELD\n - `wa_credit_line` = WA_CREDIT_LINE","examples":["bp_wallet"]},"normal_balance":{"$ref":"#/components/schemas/Direction","description":" - `-1` = CREDIT\n - `1` = DEBIT"},"reference_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Type"},"reference_uuid":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Reference Uuid","description":"The associated Product ID or other parent account thatthis Ledger Account is intended to track transactions for.If Wallet mode is enabled, this can also handle trackingindividual users.","examples":["61dd0b086fd048518762757612b4a6d3"]},"currency":{"type":"string","maxLength":32,"title":"Currency","description":"GRL's Ledger system allows tracking of transactions inany currency possible. This is useful for trackingpoints, stars, coins, or any other currency that may beused in a Supplier's platform.","default":"USD"}},"type":"object","required":["display_name","qualified_name","account_type","normal_balance"],"title":"LedgerAccount"},"LedgerEntry":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"direction":{"$ref":"#/components/schemas/Direction"},"account_uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Account Uuid"},"amount":{"type":"integer","exclusiveMaximum":9.223372036854776e+18,"exclusiveMinimum":0.0,"title":"Amount","description":"The USDCent amount. A LedgerEntry cannot be made for0 USDCent and it cannot be negative.","examples":[531]},"transaction_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transaction Id"}},"type":"object","required":["direction","account_uuid","amount"],"title":"LedgerEntry"},"LedgerTransaction":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the Transaction (TX) was created into the database.This does not represent the exact time for any actionwhich may be responsible for this Transaction (TX), and TX timestamps will likely be a few milliseconds delayed"},"ext_description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Ext Description"},"tag":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Tag"},"metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Metadata"},"entries":{"items":{"$ref":"#/components/schemas/LedgerEntry"},"type":"array","title":"Entries","description":"A Transaction (TX) is composed of multiple Entry events."}},"additionalProperties":false,"type":"object","title":"LedgerTransaction"},"MarketProfileKnowledge":{"properties":{"source":{"$ref":"#/components/schemas/Source","maxLength":16,"description":"Marketplace this question is from"},"question_id":{"type":"string","title":"Question Id","examples":["gender","1843","gender_plus"]},"answer":{"items":{"type":"string"},"type":"array","title":"Answer","examples":[["male"],["7657644"],["1"]]},"created":{"type":"string","format":"date-time","title":"Created","description":"When the User submitted this Profiling data"}},"type":"object","required":["source","question_id","created"],"title":"MarketProfileKnowledge","description":"This is used solely in API responses, so it is simplified."},"MarketplaceBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]},"x":{"type":"integer","minimum":0.0,"title":"X","description":"For UI. Provides a dimensionality position for the bucket on the x-axis.","default":0,"examples":[0,1,2]},"y":{"type":"integer","minimum":0.0,"title":"Y","description":"For UI. Provides a dimensionality position for the bucket on the y-axis.","default":0,"examples":[0,1,2]},"name":{"type":"string","title":"Name","description":"Currently unused. Will always return empty string","default":""},"description":{"type":"string","title":"Description","description":"Currently unused. Will always return empty string","default":""},"category":{"items":{"$ref":"#/components/schemas/CategoryAssociation"},"type":"array","title":"Category"},"contents":{"items":{"$ref":"#/components/schemas/BucketTask"},"type":"array","title":"Contents"},"duration":{"$ref":"#/components/schemas/DurationSummary"},"payout":{"$ref":"#/components/schemas/PayoutSummary"},"source":{"type":"string","enum":["innovate","dynata","schlesinger","purespectrum","morning","pollfish","precision","repdata","prodege"],"title":"Source","description":"this is the source of the contents","examples":["pollfish"]}},"additionalProperties":false,"type":"object","required":["id","uri","contents","duration","payout","source"],"title":"MarketplaceBucket"},"MarketplaceInventorySummary":{"properties":{"live_tasks":{"items":{"$ref":"#/components/schemas/CountStat"},"type":"array","title":"Live Tasks","description":"The count of tasks that are currently live"},"live_gen_pop_tasks":{"items":{"$ref":"#/components/schemas/CountStat"},"type":"array","title":"Live Gen Pop Tasks","description":"The count of gen-pop tasks that are currently live"},"tasks_created":{"items":{"$ref":"#/components/schemas/CountStat"},"type":"array","title":"Tasks Created","description":"The count of tasks created"},"required_finishes":{"items":{"$ref":"#/components/schemas/CountStat"},"type":"array","title":"Required Finishes","description":"Number of finishes needed across all live tasks"},"payout":{"items":{"$ref":"#/components/schemas/StatisticalSummaryStat"},"type":"array","title":"Payout","description":"The distribution of payouts for all live tasks"},"expected_duration":{"items":{"$ref":"#/components/schemas/StatisticalSummaryStat"},"type":"array","title":"Expected Duration","description":"The distribution of expected durations for all live tasks"},"required_finishes_per_task":{"items":{"$ref":"#/components/schemas/StatisticalSummaryStat"},"type":"array","title":"Required Finishes Per Task","description":"The distribution of required finishes on all live tasks"}},"type":"object","title":"MarketplaceInventorySummary"},"MarketplaceOfferwall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/MarketplaceBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"MarketplaceOfferwall","description":"Returns buckets grouped by marketplace, one per marketplace, with the\ntasks ordered by quality.\n\nOfferwall code: `5fa23085`"},"MarketplaceOfferwallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/MarketplaceOfferwall"}},"type":"object","required":["info","offerwall"],"title":"MarketplaceOfferwallResponse"},"MarketplaceSummary":{"properties":{"inventory":{"$ref":"#/components/schemas/MarketplaceInventorySummary","description":"Inventory of the marketplace"},"user_activity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Activity","description":"User activity of the marketplace"}},"type":"object","required":["inventory"],"title":"MarketplaceSummary"},"MaxGaugeBySource":{"properties":{"value":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Value"},"by_source":{"additionalProperties":{"type":"integer","minimum":0.0},"propertyNames":{"$ref":"#/components/schemas/Source"},"type":"object","title":"By Source"}},"type":"object","title":"MaxGaugeBySource"},"MilestoneContestEndCondition":{"properties":{"max_winners":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Winners","description":"The contest will end once this many users have won (i.e. reachedthe milestone)."},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At","description":"The Contest is over at the ends_at time."}},"type":"object","title":"MilestoneContestEndCondition","description":"Defines the conditions to evaluate to determine when the contest is over.\nMultiple conditions can be set. The contest is over once ANY conditions are met."},"MilestoneUserView":{"properties":{"target_amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Target Amount","description":"Each user 'wins' (receives prizes) once this target amount is reached."},"entry_trigger":{"anyOf":[{"$ref":"#/components/schemas/ContestEntryTrigger"},{"type":"null"}],"description":"What user action triggers an entry automatically."},"valid_for":{"anyOf":[{"type":"string","format":"duration"},{"type":"null"}],"title":"Valid For","description":"The time after valid_for_event for which the contest is open"},"valid_for_event":{"anyOf":[{"type":"string","const":"signup"},{"type":"null"}],"title":"Valid For Event"},"name":{"type":"string","maxLength":128,"title":"Name","description":"Name of contest. Can be displayed to user."},"description":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Description","description":"Description of contest. Can be displayed to user."},"contest_type":{"type":"string","const":"milestone","title":"Contest Type","default":"milestone"},"end_condition":{"$ref":"#/components/schemas/MilestoneContestEndCondition"},"prizes":{"items":{"$ref":"#/components/schemas/ContestPrize"},"type":"array","minItems":1,"title":"Prizes"},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"When the contest starts"},"terms_and_conditions":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Terms And Conditions"},"status":{"$ref":"#/components/schemas/ContestStatus","default":"active"},"country_isos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Isos","description":"Contest is restricted to these countries. If null, all countries are allowed"},"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid"},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","description":"Contest applies only to a single BP"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this contest was created"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When this contest was last modified. Does not include entries being created/modified"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the contest ended"},"end_reason":{"anyOf":[{"$ref":"#/components/schemas/ContestEndReason"},{"type":"null"}],"description":"The reason the contest ended"},"product_user_id":{"type":"string","title":"Product User Id"},"user_winnings":{"items":{"$ref":"#/components/schemas/ContestWinner"},"type":"array","title":"User Winnings","description":"The prizes won in this contest by the requested user"},"entry_type":{"type":"string","const":"count","title":"Entry Type","default":"count"},"win_count":{"type":"integer","title":"Win Count","description":"The number of times the milestone has been reached.","default":0},"user_amount":{"type":"integer","title":"User Amount","description":"The total amount for this user for this contest"}},"additionalProperties":false,"type":"object","required":["target_amount","name","end_condition","product_id","product_user_id","user_amount"],"title":"MilestoneUserView","example":{"contest_type":"milestone","created_at":"2025-06-12T21:12:58.061205Z","description":"Only valid for the first 50 users","end_condition":{"max_winners":50},"entry_trigger":"task_complete","entry_type":"count","name":"Win a 50% bonus for 7 days and a $5 bonus after your first 10 completes!","prizes":[{"estimated_cash_value":0,"kind":"promotion","name":"50% bonus on completes for 7 days"},{"cash_amount":500,"estimated_cash_value":500,"kind":"cash","name":"$5.00 Bonus"}],"product_id":"1108d053e4fa47c5b0dbdcd03a7981e7","product_user_id":"test-user","starts_at":"2025-06-12T21:12:58.061170Z","status":"active","target_amount":10,"terms_and_conditions":"https://www.example.com/","updated_at":"2025-06-12T21:12:58.061205Z","user_amount":8,"user_winnings":[],"uuid":"747fe3b709ae460e816821dcb81aebb9","win_count":12}},"OfferWallCategoryRequest":{"properties":{"adwords_category":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Adwords Category","examples":[["45","65"]]},"category":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Category","examples":[["98c137e4e90a4d92ac6c00e523eb1b50"]]},"exclude_adwords_category":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Adwords Category","examples":[["1558"]]},"exclude_category":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Category","examples":[["21536f160f784189be6194ca894f3a65","7aa8bf4e71a84dc3b2035f93f9f9c77e"]]}},"type":"object","title":"OfferWallCategoryRequest"},"OfferWallInfo":{"properties":{"success":{"type":"boolean","title":"Success"}},"type":"object","required":["success"],"title":"OfferWallInfo"},"OfferWallRequestYieldmanParams":{"properties":{"conversion_factor_adj":{"type":"number","title":"Conversion Factor Adj","description":"Centered around 0. Higher results in higher weight given to conversion (in the scoring function)","default":0.0},"dropoffrate_factor_adj":{"type":"number","title":"Dropoffrate Factor Adj","description":"Centered around 0. Higher results in higher penalty given to dropoffs (in the scoring function)","default":0.0},"longfail_factor_adj":{"type":"number","title":"Longfail Factor Adj","description":"Centered around 0. Higher results in higher penalty given to long fail (in the scoring function)","default":0.0},"recon_factor_adj":{"type":"number","title":"Recon Factor Adj","description":"Centered around 0. Higher results in higher penalty given to recons (in the scoring function)","default":0.0},"recon_likelihood_max":{"type":"number","title":"Recon Likelihood Max","description":"Tolerance for recon likelihood (0 to 1)","default":0.8}},"type":"object","title":"OfferWallRequestYieldmanParams"},"OfferwallConfig":{"properties":{},"type":"object","title":"OfferwallConfig"},"OfferwallReason":{"type":"string","enum":["USER_BLOCKED","HIGH_RECON_RATE","UNCOMMON_DEMOGRAPHICS","UNDER_MINIMUM_AGE","EXHAUSTED_HIGH_VALUE_SUPPLY","ALL_ELIGIBLE_ATTEMPTED","LOW_CURRENT_SUPPLY"],"title":"OfferwallReason"},"OneShotOfferwall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/OneShotOfferwallBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"OneShotOfferwall","description":"Each bucket has only 1 single task, and only basic info is returned\n about each bucket.\n\nOfferwall code: `6f27b1ae`"},"OneShotOfferwallBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]},"duration":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Duration","description":"The bucket's expected duration, in seconds"},"min_payout":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Min Payout","description":"The bucket's min payout, in usd cents"}},"additionalProperties":false,"type":"object","required":["id","uri","duration","min_payout"],"title":"OneShotOfferwallBucket"},"OneShotOfferwallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/OneShotOfferwall"}},"type":"object","required":["info","offerwall"],"title":"OneShotOfferwallResponse"},"POPFinancial":{"properties":{"product_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Product Id","examples":["3d350f18fdfe41f5a0e95b5e1c28733e"]},"time":{"type":"string","format":"date-time","title":"Time","description":"The starting time block for the respective 'Period' thatthis grouping is on. The `time` could be the start of a 1 minute or 1 hour block for example."},"payout":{"type":"integer","minimum":0.0,"title":"Payout","description":"The total amount (in USD cents) that the Brokerage Producthas earned within a respective time period.","default":0,"examples":[8359]},"adjustment":{"type":"integer","title":"Adjustment","description":"The total amount (in USD cents) that the Brokerage Producthas had adjusted within a respective time period. Most ofthe time, this will be negative due to Complete to Incomplete reconciliations. However, it can also be positive due to Incomplete to Complete adjustments.","examples":[1911]},"adjustment_types":{"items":{"$ref":"#/components/schemas/AdjustmentType"},"type":"array","title":"Adjustment Types"},"expense":{"type":"integer","title":"Expense","description":"For Product accounts that are setup with Respondent payouts,competitions, user bonuses, or other associated 'costs', thoseexpenses are accounted for here. This will be negative forthose types of costs."},"net":{"type":"integer","title":"Net","description":"This is the sum of the Payout total, Adjustment and any Expenses total. It can be positive or negative for any specific time period.","examples":[10270]},"payment":{"type":"integer","title":"Payment","description":"Any ACH or Wire amount that was issued between GRL and the Supplier.","examples":[3408288]}},"type":"object","required":["time","adjustment","adjustment_types","expense","net","payment"],"title":"POPFinancial","description":"We can't use our USDCent class in here because aside from it not\n supporting negative values for our adjustments, FastAPI also\n complains because it doesn't know how to generate documentation\n for it. - Max 2024-06-25"},"PatternValidation":{"properties":{"message":{"type":"string","title":"Message","description":"Message to display if validation fails"},"pattern":{"type":"string","title":"Pattern","description":"Regex string to validate. min_length and max_length are checked separately, even if they are part of the regex."}},"type":"object","required":["message","pattern"],"title":"PatternValidation"},"PayoutConfig":{"properties":{"payout_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Format","description":"\nThe format describing the str representation of a payout. Typically, this would be displayed to a user.\nThe payout_format is similar to python format string with a subset of functionality supported.\nOnly float with a precision are supported along with an optional comma for a thousands separator.\nIn addition, a mathematical operator can be applied, such as dividing by 100. \nExamples are shown assuming payout = 100 (one dollar).\n- \"{payout*10:,.0f} Points\" -> \"1,000 Points\"\n- \"${payout/100:.2f}\" -> \"$1.00\"\n","examples":["{payout*10:,.0f} Points","${payout/100:.2f}","{payout:.0f}"]},"payout_transformation":{"anyOf":[{"$ref":"#/components/schemas/PayoutTransformation"},{"type":"null"}],"description":"How the BP's payout is converted to the User's payout"}},"type":"object","title":"PayoutConfig","description":"Store configuration related to payouts, payout transformation, and user\npayout formatting."},"PayoutStatus":{"type":"string","enum":["PENDING","APPROVED","REJECTED","CANCELLED","FAILED","COMPLETE"],"title":"PayoutStatus","description":"The max size of the db field that holds this value is 20, so please\ndon't add new values longer than that!"},"PayoutSummary":{"properties":{"min":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Min"},"max":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Max"},"mean":{"anyOf":[{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Mean"},"q1":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Q1"},"q2":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Q2"},"q3":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Q3"},"lower_whisker":{"type":"integer","title":"Lower Whisker","readOnly":true},"upper_whisker":{"type":"integer","title":"Upper Whisker","readOnly":true}},"type":"object","required":["min","max","q1","q2","q3","lower_whisker","upper_whisker"],"title":"PayoutSummary","description":"Payouts are in Integer USD Cents","examples":[{"max":132,"min":14,"q1":45,"q2":68,"q3":124}]},"PayoutTransformation":{"properties":{"f":{"type":"string","enum":["payout_transformation_percent","payout_transformation_amt"],"title":"F","description":"The name of the transformation function to use."},"kwargs":{"anyOf":[{"$ref":"#/components/schemas/PayoutTransformationPercentArgs"},{"type":"null"}],"description":"The kwargs to pass to the transformation function.","examples":[{"max_payout":"5.00","pct":0.5}]}},"type":"object","required":["f"],"title":"PayoutTransformation","description":"This model describe how the bp_payout is converted to the user_payout.\nIf None, the user_payout is None.\n\nIf the user_wallet_enabled is `False`, the user_payout is used to\n 1) know how to transform the expected payouts for offerwall buckets\n (if min_payout is requested, this is based on the user_payout)\n 2) show the user (using the payout_format) how much they made (in\n the Task Status Response).\nIf the user_wallet_enabled is `True`, then in addition to the above, the\n user_payout is the amount actually paid to the user's wallet."},"PayoutTransformationPercentArgs":{"properties":{"pct":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Pct","description":"The percentage of the bp_payout to pay the user","examples":[0.5]},"min_payout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Payout","description":"The minimum amount paid for a complete. Note: This does not check that the actual payout was at least this amount.","examples":["0.50"]},"max_payout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max Payout","description":"The maximum amount paid for a complete","examples":["5.00"]}},"type":"object","required":["pct"],"title":"PayoutTransformationPercentArgs"},"PayoutType":{"type":"string","enum":["PAYPAL","TANGO","DWOLLA","ACH","WIRE","CASH_IN_MAIL","PRIZE","AMT","AMT_BONUS","AMT_ASSIGNMENT","AMT_ASSIGNMENT"],"title":"PayoutType","description":"The method in which the requested payout is delivered."},"PaypalCashoutMethodData":{"properties":{"type":{"type":"string","const":"PAYPAL","title":"Type","default":"PAYPAL"},"email":{"type":"string","format":"email","title":"Email","description":"Email address of the paypal user","examples":["test@example.com"]}},"type":"object","required":["email"],"title":"PaypalCashoutMethodData"},"PingMessage":{"properties":{"kind":{"type":"string","const":"ping","title":"Kind","default":"ping"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","title":"PingMessage"},"PongMessage":{"properties":{"kind":{"type":"string","const":"pong","title":"Kind","default":"pong"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","title":"PongMessage"},"Product":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier of the Brokerage Product","examples":["1108d053e4fa47c5b0dbdcd03a7981e7"]},"name":{"type":"string","maxLength":255,"minLength":3,"title":"Name","description":"Name of the Brokerage Product. Must be unique within a Team","examples":["Website ABC"]},"enabled":{"type":"boolean","title":"Enabled","description":"This is only used to hard block a Product in order to immediately & safely protect against fraud entrances.","default":true},"payments_enabled":{"type":"boolean","title":"Payments Enabled","description":"This is only to determine if ACH or Wire payments should be made to the Produce.","default":true},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created","description":"When the Product was created, this does necessarily mean it started to retrieve traffic at that time."},"team_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Team Id","description":"The organization (group of generalresearch.com admin accounts) that is allowed to modify and manage thisProduct","examples":["b96c1209cf4a4baaa27d38082421a039"]},"business_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Business Id","description":"The legal business entity or individual that is responsible for this account, and that receive SupplierPayments for this Product's activity.","examples":["9b1d71aab7b84112ac936a574fadd5d6"]},"tags":{"items":{"$ref":"#/components/schemas/SupplierTag"},"type":"array","uniqueItems":true,"title":"Tags","description":"Tags which are used to annotate supplier traffic"},"commission_pct":{"type":"string","title":"Commission Pct","default":"0.05"},"redirect_url":{"type":"string","title":"Redirect Url","description":"Where to redirect the user after finishing a session. When a user get redirected back to the supplier, a query param will be added with the name 'tsid', and the value of the TSID for the session. For example: callback_uri: 'https://www.example.com/test/?a=1&b=2' might result in the user getting redirected to: 'https://www.example.com/grl-callback/?a=1&b=2&tsid=c6ab6ba1e75b44e2bf5aab00fc68e3b7'.","examples":["https://www.example.com/grl-callback/?a=1&b=2"]},"harmonizer_domain":{"type":"string","title":"Harmonizer Domain","description":"This is the domain that is used for the GRS (General Research Survey) platform. This is a simple javascript application which may profile the respondent for anyprofiling questions, along with collecting any browserbased security information. The value is a scheme+domain only (no path).","default":"https://profile.generalresearch.com/"},"sources_config":{"anyOf":[{"$ref":"#/components/schemas/SourcesConfig"},{"$ref":"#/components/schemas/SupplyConfig"}],"title":"Sources Config"},"session_config":{"$ref":"#/components/schemas/SessionConfig"},"payout_config":{"$ref":"#/components/schemas/PayoutConfig"},"user_wallet_config":{"$ref":"#/components/schemas/UserWalletConfig"},"user_create_config":{"$ref":"#/components/schemas/UserCreateConfig"},"offerwall_config":{"$ref":"#/components/schemas/OfferwallConfig"},"profiling_config":{"$ref":"#/components/schemas/ProfilingConfig"},"user_health_config":{"$ref":"#/components/schemas/UserHealthConfig"},"yield_man_config":{"$ref":"#/components/schemas/YieldManConfig"},"balance":{"anyOf":[{"$ref":"#/components/schemas/ProductBalances"},{"type":"null"}],"description":"Product Balance"},"payouts_total_str":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payouts Total Str"},"payouts_total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Payouts Total"},"payouts":{"anyOf":[{"items":{"$ref":"#/components/schemas/BrokerageProductPayoutEvent"},"type":"array"},{"type":"null"}],"title":"Payouts","description":"Product Payouts. These are the ACH or Wire payments that were sent to theBusiness on behalf of this specific Product"},"pop_financial":{"anyOf":[{"items":{"$ref":"#/components/schemas/POPFinancial"},"type":"array"},{"type":"null"}],"title":"Pop Financial"},"bp_account":{"anyOf":[{"$ref":"#/components/schemas/LedgerAccount"},{"type":"null"}]},"user_wallet":{"$ref":"#/components/schemas/UserWalletConfig","readOnly":true}},"type":"object","required":["name","redirect_url","user_wallet"],"title":"Product"},"ProductBalances":{"properties":{"product_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Product Id","examples":["7bb8fd6215c1451399ac80a4a44d4044"]},"last_event":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Event"},"bp_payment_credit":{"type":"integer","minimum":0.0,"title":"Bp Payment Credit","description":"The total amount that has been earned by the Task completes, for this Brokerage Product account.","default":0,"examples":[18837]},"adjustment_credit":{"type":"integer","minimum":0.0,"title":"Adjustment Credit","description":"Positive reconciliations issued back to the Brokerage Product account.","default":0,"examples":[2]},"adjustment_debit":{"type":"integer","minimum":0.0,"title":"Adjustment Debit","description":"Negative reconciliations for any Task completes","default":0,"examples":[753]},"supplier_credit":{"type":"integer","minimum":0.0,"title":"Supplier Credit","description":"ACH or Wire amounts issued to GRL from a Supplier to recoup for a negative Brokerage Product balance","default":0,"examples":[0]},"supplier_debit":{"type":"integer","minimum":0.0,"title":"Supplier Debit","description":"ACH or Wire amounts sent to a Supplier","default":0,"examples":[10000]},"user_bonus_credit":{"type":"integer","minimum":0.0,"title":"User Bonus Credit","description":"If a respondent ever pays back an product account.","default":0,"examples":[0]},"user_bonus_debit":{"type":"integer","minimum":0.0,"title":"User Bonus Debit","description":"Pay a user into their wallet balance. There is no fee here. There is only a fee when the user requests a payout.The bonus could be as a bribe, winnings for a contest, leaderboard, etc.","default":0,"examples":[2745]},"issued_payment":{"type":"integer","minimum":0.0,"title":"Issued Payment","description":"This is the amount that we decide to credit as havingtaken from this Product. If there is any amount not issuedit is summed up over the Business to offset any negativebalances elsewhere.","default":0},"payout":{"type":"integer","title":"Task Payouts","description":"The sum amount of all Task payouts","readOnly":true,"examples":[18837]},"payout_usd_str":{"type":"string","title":"Task Payouts USD Str","readOnly":true,"examples":["$18,837.00"]},"adjustment":{"type":"integer","title":"Task Adjustments","description":"The sum amount of all Task Adjustments","readOnly":true,"examples":[-751]},"expense":{"type":"integer","title":"Product Expenses","description":"The sum amount of any associated Product Expenses (eg: user bonuses)","readOnly":true,"examples":[-2745]},"net":{"type":"integer","title":"Net Earnings","description":"The Product's Net Earnings which is equal to the totalamount of Task Payouts, with Task Adjustments and anyProduct Expenses deducted. This can be positive ornegative.","readOnly":true,"examples":[15341]},"payment":{"type":"integer","minimum":0.0,"title":"Supplier Payments","description":"The sum amount of all Supplier Payments (eg ACH or Wire transfers)","readOnly":true,"examples":[10000]},"payment_usd_str":{"type":"string","title":"Supplier Payments","readOnly":true,"examples":["$10,000"]},"balance":{"type":"integer","title":"Product Balance","description":"The Product's Balance which is equal to the Product's Netamount with already issued Supplier Payments deducted. This can be positive or negative.","readOnly":true,"examples":[5341]},"retainer":{"type":"integer","minimum":0.0,"title":"Smart Retainer","description":"The Smart Retainer is an about of money that is held byGRL to account for any Task Adjustments that may occurin the future. The amount will always be positive, andif the Product's balance is negative, the retainer will be $0.00 as the Product is not eligible for any SupplierPayments either way.","readOnly":true,"examples":[1335]},"retainer_usd_str":{"type":"string","title":"Smart Retainer USD Str","readOnly":true,"examples":["$1,335.00"]},"available_balance":{"type":"integer","minimum":0.0,"title":"Available Balance","description":"The Available Balance is the amount that is currently, andimmediately available for withdraw from the Supplier'sbalance. Supplier Payments are made every Friday for Businesses with an ACH connected Bank Account to GRL, while a Business that requires an International Wire are issued on the last Friday of every Month.","readOnly":true,"examples":[4006]},"available_balance_usd_str":{"type":"string","title":"Available Balance USD Str","readOnly":true,"examples":["$4,006.00"]},"recoup":{"type":"integer","minimum":0.0,"title":"Recoup","readOnly":true,"examples":[282]},"recoup_usd_str":{"type":"string","title":"Recoup Str","readOnly":true,"examples":["$2.04"]},"adjustment_percent":{"type":"number","title":"Adjustment Percentage","description":"The percentage of USDCent value that has been adjustedover all time for this Product.","readOnly":true,"examples":[0.064938]}},"type":"object","required":["payout","payout_usd_str","adjustment","expense","net","payment","payment_usd_str","balance","retainer","retainer_usd_str","available_balance","available_balance_usd_str","recoup","recoup_usd_str","adjustment_percent"],"title":"ProductBalances"},"ProfilingConfig":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"If False, the harmonizer/profiling system is not used at all. This should never be False unless special circumstances","default":true},"grs_enabled":{"type":"boolean","title":"Grs Enabled","description":"If grs_enabled is False, and is_grs is passed in the profiling-questions call, \n then don't actually return any questions. This allows a client to hit the endpoint with no limit \n and still get questions. In effect, this means that we'll redirect the user through the GRS\n system but won't present them any questions.","default":true},"n_questions":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"N Questions","description":"Use to hard code the number of questions to ask. None means use default algorithm."},"max_questions":{"type":"integer","exclusiveMinimum":0.0,"title":"Max Questions","description":"The max number of questions we would ask in a session","default":10},"avg_question_count":{"type":"number","exclusiveMinimum":0.0,"title":"Avg Question Count","description":"The average number of questions to ask in a session","default":5},"task_injection_freq_mult":{"type":"number","exclusiveMinimum":0.0,"title":"Task Injection Freq Mult","description":"Scale how frequently we inject profiling questions, relative to the default.1 is default, 2 is twice as often. 10 means always. 0.5 half as often","default":1},"non_us_mult":{"type":"number","exclusiveMinimum":0.0,"title":"Non Us Mult","description":"Non-us multiplier, used to increase freq and length of profilers in all non-us countries.This value is multiplied by task_injection_freq_mult and avg_question_count.","default":2},"hidden_questions_expiration_hours":{"type":"integer","exclusiveMinimum":0.0,"title":"Hidden Questions Expiration Hours","description":"How frequently we should refresh hidden questions","default":168}},"type":"object","title":"ProfilingConfig"},"ProfilingInfoResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"profiling-info":{"items":{"$ref":"#/components/schemas/UpkProperty"},"type":"array","title":"Profiling-Info"}},"type":"object","required":["status","profiling-info"],"title":"ProfilingInfoResponse"},"PropertyType":{"type":"string","enum":["i","n","x"],"title":"PropertyType"},"RaffleUserView":{"properties":{"name":{"type":"string","maxLength":128,"title":"Name","description":"Name of contest. Can be displayed to user."},"description":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Description","description":"Description of contest. Can be displayed to user."},"contest_type":{"type":"string","const":"raffle","title":"Contest Type","default":"raffle"},"end_condition":{"$ref":"#/components/schemas/ContestEndCondition"},"prizes":{"items":{"$ref":"#/components/schemas/ContestPrize"},"type":"array","minItems":1,"title":"Prizes"},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"When the contest starts"},"terms_and_conditions":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Terms And Conditions"},"status":{"$ref":"#/components/schemas/ContestStatus","default":"active"},"country_isos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Isos","description":"Contest is restricted to these countries. If null, all countries are allowed"},"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid"},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","description":"Contest applies only to a single BP"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this contest was created"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When this contest was last modified. Does not include entries being created/modified"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At","description":"When the contest ended"},"end_reason":{"anyOf":[{"$ref":"#/components/schemas/ContestEndReason"},{"type":"null"}],"description":"The reason the contest ended"},"product_user_id":{"type":"string","title":"Product User Id"},"user_winnings":{"items":{"$ref":"#/components/schemas/ContestWinner"},"type":"array","title":"User Winnings","description":"The prizes won in this contest by the requested user"},"entry_type":{"type":"string","const":"cash","title":"Entry Type","default":"cash"},"entry_rule":{"$ref":"#/components/schemas/ContestEntryRule"},"current_amount":{"anyOf":[{"type":"integer"},{"type":"integer","minimum":0.0}],"title":"Current Amount","description":"Sum of all entry amounts","default":0},"current_participants":{"type":"integer","title":"Current Participants","description":"Count of unique participants","default":0},"user_amount":{"anyOf":[{"type":"integer"},{"type":"integer","minimum":0.0}],"title":"User Amount","description":"The total amount this user has entered"},"user_amount_today":{"anyOf":[{"type":"integer"},{"type":"integer","minimum":0.0}],"title":"User Amount Today","description":"The total amount this user has entered in the past 24 hours"},"current_win_probability":{"type":"number","title":"Current Win Probability","description":"Probability of this user winning 1 or more prizes, if the contestended right now","readOnly":true},"projected_win_probability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Projected Win Probability","description":"Probability of this user winning 1 or more prizes, once the contestis projected to end. This value is only calculated if the contest has a target_entry_amountend condition.","readOnly":true}},"additionalProperties":false,"type":"object","required":["name","end_condition","product_id","product_user_id","user_amount","user_amount_today","current_win_probability","projected_win_probability"],"title":"RaffleUserView","example":{"contest_type":"raffle","country_isos":"ca,us","created_at":"2025-06-12T21:12:58.061205Z","current_amount":4723,"current_participants":12,"current_win_probability":0.0889265297480415,"description":"iPhone winner will be drawn in proportion to entry amount. Contest ends once $800 has been entered.","end_condition":{"target_entry_amount":80000},"entry_rule":{"max_daily_entries_per_user":1000,"max_entry_amount_per_user":10000},"entry_type":"cash","name":"Win an iPhone","prizes":[{"estimated_cash_value":80000,"kind":"physical","name":"iPhone 16"}],"product_id":"1108d053e4fa47c5b0dbdcd03a7981e7","product_user_id":"test-user","projected_win_probability":0.005249999999999977,"starts_at":"2025-06-12T21:12:58.061170Z","status":"active","updated_at":"2025-06-12T21:12:58.061205Z","user_amount":420,"user_amount_today":0,"user_winnings":[],"uuid":"ce3968b8e18a4b96af62007f262ed7f7"}},"RedemptionCurrency":{"type":"string","enum":["USD","CAD","GBP","EUR","INR","AUD","PLN","SEK","SGD","MXN"],"title":"RedemptionCurrency","description":"Supported Currencies for Foreign Redemptions"},"ReportTask":{"properties":{"bpuid":{"type":"string","maxLength":128,"minLength":3,"title":"product_user_id","description":"The unique identifier for the user, which is set by the Supplier.","examples":["app-user-9329ebd"]},"reasons":{"items":{"$ref":"#/components/schemas/ReportValue"},"type":"array","title":"Reasons","description":"The reason a user reported a task.\n\nAllowed values: \n - __0__ *(REASON_UNKNOWN)*: Used to indicate the user exited the task without giving feedback\n - __1__ *(TECHNICAL_ERROR)*: Task is in the wrong language/country, unanswerable question, won't proceed to next question, loading forever, error message\n - __2__ *(NO_REDIRECT)*: Task ended (completed or failed, and showed the user some dialog indicating the task was over), but failed to redirect\n - __3__ *(PRIVACY_INVASION)*: Asked for full name, home address, identity on another site, cc\n - __4__ *(UNCOMFORTABLE_TOPICS)*: Asked about children, employer, medical issues, drug use, STDs, etc.\n - __5__ *(ASKED_FOR_NOT_ALLOWED_ACTION)*: Asked to install software, signup/login to external site, access webcam, promise to pay using external site, etc.\n - __6__ *(BAD_ON_MOBILE)*: Task doesn't work well on a mobile device\n - __7__ *(DIDNT_LIKE)*: Too long, too boring, confusing, complicated, too many open-ended/free-response questions","examples":[[3,4]]},"notes":{"type":"string","title":"Notes","default":"","examples":["The survey wanted to watch me eat Haejang-guk"]}},"additionalProperties":false,"type":"object","required":["bpuid"],"title":"ReportTask"},"ReportValue":{"type":"integer","enum":[0,1,2,3,4,5,6,7],"title":"ReportValue","description":"The reason a user reported a task."},"Scope":{"type":"string","enum":["global","team","product"],"title":"Scope"},"SessionAdjustedStatus":{"type":"string","enum":["ac","af","pa"],"title":"SessionAdjustedStatus","description":"An adjusted_status is set if a session is adjusted by the marketplace\nafter the original return. A session can be adjusted multiple times.\nThis is the most recent status. If a session was originally a complete,\nwas adjusted to incomplete, then back to complete, the adjusted_status\nwill be None, but the adjusted_timestamp will be set to the most recent\nchange."},"SessionConfig":{"properties":{"max_session_len":{"type":"integer","maximum":5400.0,"minimum":60.0,"title":"Max Session Len","description":"The amount of time (in seconds) that a respondent may spend attempting to get into a survey within a session.If NULL, there is no limit.","default":600},"max_session_hard_retry":{"type":"integer","minimum":0.0,"title":"Max Session Hard Retry","description":"The number of surveys that a respondent may attempt within a session before the session is terminated.","default":5},"min_payout":{"type":"string","title":"Min Payout","description":"The minimum amount the user should be paid for a complete. If \n no payout transformation is defined, the value is based on the BP's payout. \n If a payout transformation is defined, the min_payout is applied on the \n user's payout. Note, this is separate and distinct from the payout \n transformation's min payout. The payout transformation's min_payout does not \n care what the task's actual payout was. This min_payout will prevent\n the user from being show any tasks that would pay below this amount.","default":"0.14","examples":["0.50"]}},"type":"object","title":"SessionConfig","description":"Stores configuration related to the Session, a session being a users\nexperience attempting to do work."},"SessionEnterPayload":{"properties":{"event_type":{"type":"string","const":"session.enter","title":"Event Type","default":"session.enter"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"}},"type":"object","required":["country_iso"],"title":"SessionEnterPayload"},"SessionFinishPayload":{"properties":{"event_type":{"type":"string","const":"session.finish","title":"Event Type","default":"session.finish"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"},"duration_sec":{"type":"number","exclusiveMinimum":0.0,"title":"Duration Sec"},"status":{"$ref":"#/components/schemas/Status"},"status_code_1":{"anyOf":[{"$ref":"#/components/schemas/StatusCode1"},{"type":"null"}]},"status_code_2":{"anyOf":[{"$ref":"#/components/schemas/SessionStatusCode2"},{"type":"null"}]},"user_payout":{"anyOf":[{"type":"integer","maximum":4000.0,"minimum":0.0},{"type":"null"}],"title":"User Payout"}},"type":"object","required":["country_iso","duration_sec","status"],"title":"SessionFinishPayload"},"SessionStatusCode2":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12,13],"title":"SessionStatusCode2","description":"__Status Detail__\nThis should be set if the Session.status_code_1 is SESSION_XXX_FAIL"},"ShippingCarrier":{"type":"string","enum":["USPS","FedEx","UPS","DHL"],"title":"ShippingCarrier"},"ShippingMethod":{"type":"string","enum":["Standard","Express","Two-Day","Overnight","Same Day"],"title":"ShippingMethod"},"SingleEntryBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]}},"additionalProperties":false,"type":"object","required":["id","uri"],"title":"SingleEntryBucket"},"SingleEntryOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/SingleEntryBucket"},"type":"array","maxItems":1,"title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]},"payout_format":{"type":"string","title":"Payout Format","description":"\nThe format describing the str representation of a payout. Typically, this would be displayed to a user.\nThe payout_format is similar to python format string with a subset of functionality supported.\nOnly float with a precision are supported along with an optional comma for a thousands separator.\nIn addition, a mathematical operator can be applied, such as dividing by 100. \nExamples are shown assuming payout = 100 (one dollar).\n- \"{payout*10:,.0f} Points\" -> \"1,000 Points\"\n- \"${payout/100:.2f}\" -> \"$1.00\"\n","examples":["{payout*10:,.0f} Points","${payout/100:.2f}","{payout:.0f}"]}},"additionalProperties":false,"type":"object","required":["id","availability_count","payout_format"],"title":"SingleEntryOfferWall","description":"Only returns a single bucket with the top scoring tasks.\n\nOfferwall code: `5fl8bpv5`"},"SingleEntryOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/SingleEntryOfferWall"}},"type":"object","required":["info","offerwall"],"title":"SingleEntryOfferWallResponse"},"SoftPairBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way. If the eligibility is conditional or ineligible, the uri will be null.","examples":[null]},"category":{"items":{"$ref":"#/components/schemas/CategoryAssociation"},"type":"array","title":"Category"},"contents":{"items":{"$ref":"#/components/schemas/BucketTask"},"type":"array","title":"Contents"},"eligibility":{"type":"string","enum":["conditional","unconditional","ineligible"],"title":"Eligibility","examples":["conditional"]},"missing_questions":{"items":{"type":"string"},"type":"array","title":"Missing Questions","examples":[["fb20fd4773304500b39c4f6de0012a5a"]]},"loi":{"type":"integer","title":"Loi","description":"this is the max loi of the contents","examples":[612]},"payout":{"type":"integer","title":"Payout","description":"this is the min payout of the contents","examples":[123]}},"additionalProperties":false,"type":"object","required":["id","uri","contents","eligibility","loi","payout"],"title":"SoftPairBucket"},"SoftPairOfferwall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/SoftPairBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]},"question_info":{"additionalProperties":{"$ref":"#/components/schemas/UpkQuestion"},"type":"object","title":"Question Info","examples":[]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"SoftPairOfferwall","description":"This offerwall contains tasks for which the user has a conditional\neligibility. The questions that a user must answer to determine the\neligibility are included within each bucket. Additionally, the question\ndefinitions are included for convenience.\n\nOfferwall code: `37d1da64`"},"SoftPairOfferwallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/SoftPairOfferwall"}},"type":"object","required":["info","offerwall"],"title":"SoftPairOfferwallResponse"},"Source":{"type":"string","enum":["g","c","a","d","et","f","i","l","m","n","o","e","r","pr","p","rd","h","s","t","u","w"],"title":"Source"},"SourceConfig":{"properties":{"name":{"$ref":"#/components/schemas/Source"},"active":{"type":"boolean","title":"Active","default":true},"banned_countries":{"items":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$"},"type":"array","title":"Banned Countries"},"allow_mobile_ip":{"type":"boolean","title":"Allow Mobile Ip","default":true},"allow_pii_only_buyers":{"type":"boolean","title":"Allow Pii Only Buyers","description":"Allow Tasks from Buyers that want traffic that comes from Suppliers that can identify their users. Only supported on Pure Spectrum.","default":false},"allow_unhashed_buyers":{"type":"boolean","title":"Allow Unhashed Buyers","description":"Return Tasks from Buyers that don't have URL hashing enabled. Only supported on Pure Spectrum.","default":false},"withhold_profiling":{"type":"boolean","title":"Withhold Profiling","description":"For some Products, we may have privacy agreements prohibiting us from sharing information with the inventorySource. If True, don't add MRPQ (Market Research ProfilingQuestion) onto the entry link.","default":false},"pass_unconditional_eligible_unknowns":{"type":"boolean","title":"Pass Unconditional Eligible Unknowns","description":"Not used at the moment","default":true}},"type":"object","required":["name"],"title":"SourceConfig","description":"This could also be named \"BP:Marketplace Config\", as it describes the config\nfor a BP on a single marketplace."},"SourcesConfig":{"properties":{"user_defined":{"items":{"$ref":"#/components/schemas/SourceConfig"},"type":"array","title":"User Defined"}},"type":"object","title":"SourcesConfig","description":"Describes the marketplaces or sources that a BP can access and their respective configs,\naka 'BP:Marketplace Configs'"},"StarwallOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]},"payout_format":{"type":"string","title":"Payout Format","description":"\nThe format describing the str representation of a payout. Typically, this would be displayed to a user.\nThe payout_format is similar to python format string with a subset of functionality supported.\nOnly float with a precision are supported along with an optional comma for a thousands separator.\nIn addition, a mathematical operator can be applied, such as dividing by 100. \nExamples are shown assuming payout = 100 (one dollar).\n- \"{payout*10:,.0f} Points\" -> \"1,000 Points\"\n- \"${payout/100:.2f}\" -> \"$1.00\"\n","examples":["{payout*10:,.0f} Points","${payout/100:.2f}","{payout:.0f}"]}},"additionalProperties":false,"type":"object","required":["id","availability_count","payout_format"],"title":"StarwallOfferWall","description":"An offerwall with buckets that are clustered by setting as seeds the\nhighest scoring surveys for each bin, then the rest are distributed\naccording to their Euclidean distance using the bucket's features.\n\nOfferwall code: `b59a2d2b`"},"StarwallOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/StarwallOfferWall"}},"type":"object","required":["info","offerwall"],"title":"StarwallOfferWallResponse"},"StarwallPlusBlockOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNPlusBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"StarwallPlusBlockOfferWall","description":"Same as the StarwallOfferWall, but the buckets include contents and no\nbuckets are returned if the user is blocked.\n\nOfferwall code: `7fa1b3f4`"},"StarwallPlusBlockOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/StarwallPlusBlockOfferWall"}},"type":"object","required":["info","offerwall"],"title":"StarwallPlusBlockOfferWallResponse"},"StarwallPlusBlockRecontactOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNPlusRecontactBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"StarwallPlusBlockRecontactOfferWall","description":"Same as the StarwallOfferWall, but the buckets include contents, no\nbuckets are returned if the user is blocked, and each bucket includes\na recontact key.\n\nOfferwall code: `630db2a4`"},"StarwallPlusBlockRecontactOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/StarwallPlusBlockRecontactOfferWall"}},"type":"object","required":["info","offerwall"],"title":"StarwallPlusBlockRecontactOfferWallResponse"},"StarwallPlusOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNPlusBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"StarwallPlusOfferWall","description":"Same as the StarwallOfferWall, but the buckets include contents.\n\nOfferwall code: `5481f322`"},"StarwallPlusOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/StarwallPlusOfferWall"}},"type":"object","required":["info","offerwall"],"title":"StarwallPlusOfferWallResponse"},"StatisticalSummaryStat":{"properties":{"facet":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"propertyNames":{"enum":["country_iso","day","month"]},"type":"object","title":"Facet","description":"The grouping criteria","examples":[{"country_iso":"us"}]},"value":{"$ref":"#/components/schemas/StatisticalSummaryValue","description":"Statistical Summary for the given metric and facet"}},"type":"object","required":["facet","value"],"title":"StatisticalSummaryStat"},"StatisticalSummaryValue":{"properties":{"min":{"type":"number","title":"Min"},"max":{"type":"number","title":"Max"},"mean":{"type":"number","title":"Mean"},"q1":{"type":"number","title":"Q1"},"q2":{"type":"number","title":"Q2","description":"equal to the median"},"q3":{"type":"number","title":"Q3"},"lower_whisker":{"type":"number","title":"Lower Whisker","readOnly":true},"upper_whisker":{"type":"number","title":"Upper Whisker","readOnly":true}},"type":"object","required":["min","max","mean","q1","q2","q3","lower_whisker","upper_whisker"],"title":"StatisticalSummaryValue"},"StatsMessage":{"properties":{"kind":{"type":"string","const":"stats","title":"Kind","default":"stats"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"country_iso":{"anyOf":[{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$"},{"type":"null"}],"title":"Country Iso"},"data":{"$ref":"#/components/schemas/StatsSnapshot"}},"type":"object","required":["data"],"title":"StatsMessage"},"StatsSnapshot":{"properties":{"live_task_count":{"$ref":"#/components/schemas/AggregateBySource"},"task_created_count_last_1h":{"$ref":"#/components/schemas/AggregateBySource"},"task_created_count_last_24h":{"$ref":"#/components/schemas/AggregateBySource"},"live_tasks_max_payout":{"$ref":"#/components/schemas/MaxGaugeBySource","description":"In integer USDCents"},"country_iso":{"anyOf":[{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$"},{"type":"null"}],"title":"Country Iso"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"active_users_last_1h":{"type":"integer","minimum":0.0,"title":"Active Users Last 1H","description":"Count of users (in this product_id) that were active in the past 60 minutes.\n Behaviors that trigger active:\n - Request an offerwall\n - Enter an offerwall bucket\n - Request profiling questions\n - Submit profiling answers\n - Update user profile\n ","default":0},"active_users_last_24h":{"type":"integer","minimum":0.0,"title":"Active Users Last 24H","description":"Count of users (in this product_id) that were active in the past 24 hours.","default":0},"in_progress_users":{"type":"integer","minimum":0.0,"title":"In Progress Users","description":"Count of users that are currently doing work at this moment"},"signups_last_24h":{"type":"integer","minimum":0.0,"title":"Signups Last 24H","description":"Count of users created"},"session_enters_last_1h":{"type":"integer","minimum":0.0,"title":"Session Enters Last 1H"},"session_enters_last_24h":{"type":"integer","minimum":0.0,"title":"Session Enters Last 24H"},"session_fails_last_1h":{"type":"integer","minimum":0.0,"title":"Session Fails Last 1H"},"session_fails_last_24h":{"type":"integer","minimum":0.0,"title":"Session Fails Last 24H"},"session_completes_last_1h":{"type":"integer","minimum":0.0,"title":"Session Completes Last 1H"},"session_completes_last_24h":{"type":"integer","minimum":0.0,"title":"Session Completes Last 24H"},"sum_payouts_last_1h":{"type":"integer","minimum":0.0,"title":"Sum Payouts Last 1H","description":"In integer USDCents"},"sum_payouts_last_24h":{"type":"integer","minimum":0.0,"title":"Sum Payouts Last 24H","description":"In integer USDCents"},"session_avg_payout_last_24h":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Session Avg Payout Last 24H","description":"Average (actual) payout of all tasks completed in the past 24 hrs"},"session_avg_user_payout_last_24h":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Session Avg User Payout Last 24H","description":"Average (actual) user payout of all tasks completed in the past 24 hrs"},"session_fail_avg_loi_last_24h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Session Fail Avg Loi Last 24H","description":"Average LOI of all tasks terminated in the past 24 hrs (excludes abandons)"},"session_complete_avg_loi_last_24h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Session Complete Avg Loi Last 24H","description":"Average LOI of all tasks completed in the past 24 hrs"}},"type":"object","required":["in_progress_users","signups_last_24h","session_enters_last_1h","session_enters_last_24h","session_fails_last_1h","session_fails_last_24h","session_completes_last_1h","session_completes_last_24h","sum_payouts_last_1h","sum_payouts_last_24h","session_avg_payout_last_24h","session_avg_user_payout_last_24h","session_fail_avg_loi_last_24h","session_complete_avg_loi_last_24h"],"title":"StatsSnapshot"},"Status":{"type":"string","enum":["c","f","a","t"],"title":"Status","description":"The outcome of a session or wall event. If the session is still in progress, the status will be NULL."},"StatusCode1":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"title":"StatusCode1","description":"__High level status code for outcome of the session.__\nThis should only be NULL if the Status is ABANDON or TIMEOUT"},"StatusInfoResponseFail":{"properties":{"info":{"$ref":"#/components/schemas/StatusSuccessFail"},"msg":{"type":"string","title":"Msg","description":"An optional message, if success is False","examples":["An error has occurred"]}},"type":"object","required":["info","msg"],"title":"StatusInfoResponseFail"},"StatusResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]}},"type":"object","required":["status"],"title":"StatusResponse"},"StatusResponseFailure":{"properties":{"status":{"type":"string","const":"failure","title":"Status","description":"The status of the API response.","examples":["failure"]},"msg":{"type":"string","title":"Msg","description":"An optional message, if the status is failure.","examples":["An error has occurred"]}},"type":"object","required":["status","msg"],"title":"StatusResponseFailure"},"StatusSuccessFail":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the API response is successful.","default":false}},"type":"object","title":"StatusSuccessFail"},"StreakFulfillment":{"type":"string","enum":["active","complete"],"title":"StreakFulfillment","description":"What has to happen for a user to fulfill a period for a streak"},"StreakPeriod":{"type":"string","enum":["day","week","month"],"title":"StreakPeriod"},"StreakState":{"type":"string","enum":["active","at_risk","broken"],"title":"StreakState"},"SubscribeMessage":{"properties":{"kind":{"type":"string","const":"subscribe","title":"Kind","default":"subscribe"},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","examples":["4fe381fb7186416cb443a38fa66c6557"]}},"type":"object","required":["product_id"],"title":"SubscribeMessage"},"SupplierTag":{"type":"string","enum":["mobile","js-offerwall","double-opt-in","single-sign-on","phone-number-verified","test-a","test-b"],"title":"SupplierTag","description":"Available tags which can be used to annotate supplier traffic\n\nNote: should not include commas!"},"SupplyConfig":{"properties":{"policies":{"items":{"$ref":"#/components/schemas/SupplyPolicy"},"type":"array","title":"Policies"}},"type":"object","title":"SupplyConfig","description":"Describes the set of policies for how GRL can interact with marketplaces.\nThis is only used on the special \"global product\"."},"SupplyPolicy":{"properties":{"name":{"$ref":"#/components/schemas/Source"},"active":{"type":"boolean","title":"Active","default":true},"banned_countries":{"items":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$"},"type":"array","title":"Banned Countries"},"allow_mobile_ip":{"type":"boolean","title":"Allow Mobile Ip","default":true},"allow_pii_only_buyers":{"type":"boolean","title":"Allow Pii Only Buyers","description":"Allow Tasks from Buyers that want traffic that comes from Suppliers that can identify their users. Only supported on Pure Spectrum.","default":false},"allow_unhashed_buyers":{"type":"boolean","title":"Allow Unhashed Buyers","description":"Return Tasks from Buyers that don't have URL hashing enabled. Only supported on Pure Spectrum.","default":false},"withhold_profiling":{"type":"boolean","title":"Withhold Profiling","description":"For some Products, we may have privacy agreements prohibiting us from sharing information with the inventorySource. If True, don't add MRPQ (Market Research ProfilingQuestion) onto the entry link.","default":false},"pass_unconditional_eligible_unknowns":{"type":"boolean","title":"Pass Unconditional Eligible Unknowns","description":"Not used at the moment","default":true},"address":{"items":{"type":"string"},"type":"array","title":"Address","description":"address for the grpc GetOpps call"},"allow_vpn":{"type":"boolean","title":"Allow Vpn","default":false},"distribute_harmonizer_active":{"type":"boolean","title":"Distribute Harmonizer Active","default":true},"supplier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier Id","description":"For some inventory Sources, we may partition traffic using different supplier accounts instead"},"team_ids":{"anyOf":[{"items":{"type":"string","maxLength":32,"minLength":32},"type":"array"},{"type":"null"}],"title":"Team Ids"},"product_ids":{"anyOf":[{"items":{"type":"string","maxLength":32,"minLength":32},"type":"array"},{"type":"null"}],"title":"Product Ids"},"integration_mode":{"$ref":"#/components/schemas/IntegrationMode","default":"platform"},"scope":{"$ref":"#/components/schemas/Scope","description":"There must be only 1 GLOBAL config per Source. We can have more than one TEAM/PRODUCT config per Source.","readOnly":true}},"type":"object","required":["name","address","scope"],"title":"SupplyPolicy","description":"One policy describing how GRL can interact with a marketplaces in a certain way.\n This is only used on the special \"global product\", and then internally\n in grpc logic."},"SurveyEligibilityCriterion":{"properties":{"question_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Question Id","examples":["71a367fb71b243dc89f0012e0ec91749"]},"property_code":{"anyOf":[{"type":"string","maxLength":64,"minLength":3,"pattern":"^[a-z]{1,2}\\:.*"},{"type":"null"}],"title":"Property Code","examples":["c:73629"]},"question_text":{"type":"string","title":"Question Text","examples":["What company administers the retirement plan for your current employer?"]},"qualifying_answer":{"items":{"type":"string"},"type":"array","title":"Qualifying Answer","description":"User answer(s) that satisfied at least one eligibility rule","examples":["121"]},"qualifying_answer_label":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Qualifying Answer Label","examples":["Fidelity Investments"]},"explanation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Explanation","description":"Human-readable text explaining how a user's answer to this question affects eligibility","examples":["The company that administers your employer's retirement plan is **Fidelity Investments**."]},"rank":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Rank","description":"Lower values are shown more prominently in the UI"}},"type":"object","required":["question_id","property_code","question_text","qualifying_answer","qualifying_answer_label"],"title":"SurveyEligibilityCriterion","description":"Explanatory record of which question answers contributed\n to a user's eligibility for a survey.\nThis is INSUFFICIENT for determining eligibility to a task\n as it IGNORES logical operators, dependencies between criteria,\n and other requirements. It is only intended for the UI."},"TangoCashoutMethodData":{"properties":{"type":{"type":"string","const":"TANGO","title":"Type","default":"TANGO"},"utid":{"type":"string","title":"Utid","description":"tango utid"},"countries":{"items":{"type":"string"},"type":"array","title":"Countries"},"value_type":{"type":"string","enum":["variable","fixed"],"title":"Value Type"},"disclaimer":{"type":"string","title":"Disclaimer","default":""},"terms":{"type":"string","title":"Terms","default":""}},"type":"object","required":["utid","countries","value_type"],"title":"TangoCashoutMethodData"},"TaskEnterPayload":{"properties":{"event_type":{"type":"string","const":"task.enter","title":"Event Type","default":"task.enter"},"source":{"$ref":"#/components/schemas/Source"},"survey_id":{"type":"string","maxLength":32,"minLength":1,"title":"Survey Id","examples":["127492892"]},"quota_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Quota Id","description":"The marketplace's internal quota id"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"}},"type":"object","required":["source","survey_id","country_iso"],"title":"TaskEnterPayload"},"TaskFinishPayload":{"properties":{"event_type":{"type":"string","const":"task.finish","title":"Event Type","default":"task.finish"},"source":{"$ref":"#/components/schemas/Source"},"survey_id":{"type":"string","maxLength":32,"minLength":1,"title":"Survey Id","examples":["127492892"]},"quota_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Quota Id","description":"The marketplace's internal quota id"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"},"duration_sec":{"type":"number","exclusiveMinimum":0.0,"title":"Duration Sec"},"status":{"$ref":"#/components/schemas/Status"},"status_code_1":{"anyOf":[{"$ref":"#/components/schemas/StatusCode1"},{"type":"null"}]},"status_code_2":{"anyOf":[{"$ref":"#/components/schemas/WallStatusCode2"},{"type":"null"}]},"cpi":{"anyOf":[{"type":"integer","maximum":4000.0,"minimum":0.0},{"type":"null"}],"title":"Cpi"}},"type":"object","required":["source","survey_id","country_iso","duration_sec","status"],"title":"TaskFinishPayload"},"TaskStatusResponse":{"properties":{"tsid":{"type":"string","maxLength":32,"minLength":32,"title":"Tsid","description":"A unique identifier for the session","examples":["a3848e0a53d64f68a74ced5f61b6eb68"]},"product_id":{"type":"string","maxLength":32,"minLength":32,"title":"Product Id","description":"The BP ID of the associated respondent","examples":["1188cb21cb6741d79f614f6d02e9bc2a"]},"product_user_id":{"type":"string","maxLength":128,"minLength":3,"title":"Product User Id","description":"A unique identifier for each user, which is set by the Supplier","examples":["app-user-9329ebd"]},"started":{"type":"string","format":"date-time","title":"Started","description":"When the session was started"},"finished":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished","description":"When the session was finished"},"status":{"type":"integer","description":"The outcome of a session.\n - 0 - UNKNOWN\n - 1 - ENTER (the user has not yet returned)\n - 2 - INCOMPLETE (the user failed)\n - 3 - COMPLETE (the user completed the task)","examples":[3]},"payout":{"anyOf":[{"type":"integer","exclusiveMaximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Payout","description":"The amount paid to the supplier, in integer USD cents","examples":[500]},"user_payout":{"anyOf":[{"type":"integer","exclusiveMaximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"User Payout","description":"If a payout transformation is configured on this account, this is the amount the user should earn, in integer USD cents","examples":[337]},"payout_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payout Format","description":"\nThe format describing the str representation of a payout. Typically, this would be displayed to a user.\nThe payout_format is similar to python format string with a subset of functionality supported.\nOnly float with a precision are supported along with an optional comma for a thousands separator.\nIn addition, a mathematical operator can be applied, such as dividing by 100. \nExamples are shown assuming payout = 100 (one dollar).\n- \"{payout*10:,.0f} Points\" -> \"1,000 Points\"\n- \"${payout/100:.2f}\" -> \"$1.00\"\n","examples":["{payout*10:,.0f} Points","${payout/100:.2f}","{payout:.0f}"]},"user_payout_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Payout String","description":"If a payout transformation is configured on this account, this is the amount to display to the user","examples":["3370 Points"]},"kwargs":{"additionalProperties":{"type":"string"},"type":"object","title":"Kwargs","description":"Any extra url params used in the offerwall request will be passed back here"},"status_code_1":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"__High level status code for outcome of the session.__\nThis should only be NULL if the Status is ABANDON or TIMEOUT\n\nAllowed values: \n - __BUYER_FAIL__: User terminated in buyer survey\n - __BUYER_QUALITY_FAIL__: User terminated in buyer survey for quality reasons\n - __PS_FAIL__: User failed in marketplace's prescreener\n - __PS_QUALITY__: User rejected by marketplace for quality reasons\n - __PS_BLOCKED__: User is explicitly blocked by the marketplace. Note: on some marketplaces, users can have multiple PS_QUALITY terminations and still complete surveys.\n - __PS_OVERQUOTA__: User rejected by marketplace for over quota\n - __PS_DUPLICATE__: User rejected by marketplace for duplicate\n - __GRS_FAIL__: The user failed within the GRS Platform\n - __GRS_QUALITY_FAIL__: The user failed within the GRS Platform for quality reasons\n - __GRS_ABANDON__: The user abandoned/timed out within the GRS Platform\n - __PS_ABANDON__: The user abandoned/timed out within the marketplace's pre-screen system. Note: On most marketplaces, we have no way of distinguishing between this and BUYER_ABANDON. BUYER_ABANDON is used as the default, unless we know it is PS_ABANDON.\n - __BUYER_ABANDON__: The user abandoned/timed out within the client survey\n - __UNKNOWN__: The status code is not documented\n - __COMPLETE__: The user completed the task successfully\n - __MARKETPLACE_FAIL__: Something was wrong upon the user redirecting from the marketplace, e.g. no postback received, or url hashing failures.\n - __SESSION_START_FAIL__: User failed before being sent into a marketplace\n - __SESSION_CONTINUE_FAIL__: User failed between attempts\n - __SESSION_START_QUALITY_FAIL__: User failed before being sent into a marketplace for \"security\" reasons\n - __SESSION_CONTINUE_QUALITY_FAIL__: User failed between attempts for \"security\" reasons","examples":["COMPLETE"]},"status_code_2":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"__Status Detail__\nThis should be set if the Session.status_code_1 is SESSION_XXX_FAIL\n\nAllowed values: \n - __ENTRY_URL_MODIFICATION__: Unable to parse either the bucket_id, request_id, or nudge_id from the url\n - __UNRECOGNIZED_IP__: The client's IP failed maxmind lookup, or we failed to store it for some reason\n - __USER_IS_ANONYMOUS__: User is using an anonymous IP\n - __USER_IS_BLOCKED__: User is blocked\n - __USER_IS_RATE_LIMITED__: User is rate limited\n - __UNRECOGNIZED_DEVICE__: The client's useragent was not categorized as desktop, mobile, or tablet\n - __OFFERWALL_EXPIRED__: The user clicked after 5 min\n - __INTERNAL_ERROR__: Something unexpected happened\n - __OFFERWALL_COUNTRY_MISMATCH__: The user requested the offerwall for a different country than their IP address indicates\n - __INVALID_BUCKET_ID__: The bucket id indicated in the url does not exist. This is likely due to the user clicking on a bucket for an offerwall that has already been refreshed.\n - __NO_TASKS_AVAILABLE__: Not necessarily the user's fault. We thought we had surveys, but due to for e.g. the user entering on a different device than we thought, there really are none. If we get a lot of these, then that might indicate something is wrong.\n - __ATTEMPT_IS_SUSPICIOUS__: The entrance attempt was flagged by GRLIQ as suspicious\n - __GRLIQ_MISSING__: No GRLIQ forensics post was received","examples":[null]},"adjusted_status":{"anyOf":[{"$ref":"#/components/schemas/SessionAdjustedStatus"},{"type":"null"}],"description":"An adjusted_status is set if a session is adjusted by the marketplace\nafter the original return. A session can be adjusted multiple times.\nThis is the most recent status. If a session was originally a complete,\nwas adjusted to incomplete, then back to complete, the adjusted_status\nwill be None, but the adjusted_timestamp will be set to the most recent\nchange.\n\nAllowed values: \n - __ac__ *(ADJUSTED_TO_COMPLETE)*: Task was reconciled to complete\n - __af__ *(ADJUSTED_TO_FAIL)*: Task was reconciled to incomplete\n - __pa__ *(PAYOUT_ADJUSTMENT)*: The payout was changed. This applies to Sessions ONLY.","examples":[null]},"adjusted_timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Adjusted Timestamp","description":"When the adjusted status was last set.","examples":[null]},"adjusted_payout":{"anyOf":[{"type":"integer","exclusiveMaximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Adjusted Payout","description":"The new payout after adjustment.","examples":[null]},"adjusted_user_payout":{"anyOf":[{"type":"integer","exclusiveMaximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Adjusted User Payout","description":"The new user_payout after adjustment.","examples":[null]},"adjusted_user_payout_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adjusted User Payout String","description":"The new user_payout_string after adjustment.","examples":[null]},"wall_events":{"anyOf":[{"items":{"$ref":"#/components/schemas/WallOut"},"type":"array"},{"type":"null"}],"title":"Wall Events"},"currency":{"type":"string","const":"USD","title":"Currency","default":"USD"},"final_status":{"type":"integer","title":"Final Status","description":"This is deprecated","default":0},"bpuid":{"type":"string","title":"Bpuid","readOnly":true}},"type":"object","required":["tsid","product_id","product_user_id","started","bpuid"],"title":"TaskStatusResponse","description":"The status of a session"},"TasksStatusResponse":{"properties":{"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Page number","default":1},"size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Size","description":"Page size","default":50},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total","description":"Total number of results"},"tasks_status":{"items":{"$ref":"#/components/schemas/TaskStatusResponse"},"type":"array","title":"Tasks Status"},"pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pages","description":"Total number of pages","readOnly":true}},"type":"object","required":["pages"],"title":"TasksStatusResponse"},"TopNBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]},"x":{"type":"integer","minimum":0.0,"title":"X","description":"For UI. Provides a dimensionality position for the bucket on the x-axis.","default":0,"examples":[0,1,2]},"y":{"type":"integer","minimum":0.0,"title":"Y","description":"For UI. Provides a dimensionality position for the bucket on the y-axis.","default":0,"examples":[0,1,2]},"name":{"type":"string","title":"Name","description":"Currently unused. Will always return empty string","default":""},"description":{"type":"string","title":"Description","description":"Currently unused. Will always return empty string","default":""},"category":{"items":{"$ref":"#/components/schemas/CategoryAssociation"},"type":"array","title":"Category"},"duration":{"$ref":"#/components/schemas/DurationSummary"},"payout":{"$ref":"#/components/schemas/PayoutSummary"},"quality_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Quality Score","description":"A proprietary score to determine the overall quality of the tasks that are within the bucket. Higher is better.","examples":[0.29223]}},"additionalProperties":false,"type":"object","required":["id","uri","duration","payout","quality_score"],"title":"TopNBucket"},"TopNOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]},"payout_format":{"type":"string","title":"Payout Format","description":"\nThe format describing the str representation of a payout. Typically, this would be displayed to a user.\nThe payout_format is similar to python format string with a subset of functionality supported.\nOnly float with a precision are supported along with an optional comma for a thousands separator.\nIn addition, a mathematical operator can be applied, such as dividing by 100. \nExamples are shown assuming payout = 100 (one dollar).\n- \"{payout*10:,.0f} Points\" -> \"1,000 Points\"\n- \"${payout/100:.2f}\" -> \"$1.00\"\n","examples":["{payout*10:,.0f} Points","${payout/100:.2f}","{payout:.0f}"]}},"additionalProperties":false,"type":"object","required":["id","availability_count","payout_format"],"title":"TopNOfferWall","description":"An offerwall with buckets that are clustered by the `split_by` argument\nusing KMeans clustering.\n\nOfferwall code: `45b7228a7`"},"TopNOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/TopNOfferWall"}},"type":"object","required":["info","offerwall"],"title":"TopNOfferWallResponse"},"TopNPlusBlockOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNPlusBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"TopNPlusBlockOfferWall","description":"Same as the TopNOfferWall, but the buckets include contents and no\nbuckets are returned if the user is blocked.\n\nOfferwall code: `d48cce47`"},"TopNPlusBlockOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/TopNPlusBlockOfferWall"}},"type":"object","required":["info","offerwall"],"title":"TopNPlusBlockOfferWallResponse"},"TopNPlusBlockRecontactOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNPlusRecontactBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"TopNPlusBlockRecontactOfferWall","description":"Same as the TopNOfferWall, but the buckets include contents, no buckets\nare returned if the user is blocked, and each bucket includes a\n`is_recontact` key.\n\nOfferwall code: `1e5f0af8`"},"TopNPlusBlockRecontactOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/TopNPlusBlockRecontactOfferWall"}},"type":"object","required":["info","offerwall"],"title":"TopNPlusBlockRecontactOfferWallResponse"},"TopNPlusBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]},"x":{"type":"integer","minimum":0.0,"title":"X","description":"For UI. Provides a dimensionality position for the bucket on the x-axis.","default":0,"examples":[0,1,2]},"y":{"type":"integer","minimum":0.0,"title":"Y","description":"For UI. Provides a dimensionality position for the bucket on the y-axis.","default":0,"examples":[0,1,2]},"name":{"type":"string","title":"Name","description":"Currently unused. Will always return empty string","default":""},"description":{"type":"string","title":"Description","description":"Currently unused. Will always return empty string","default":""},"category":{"items":{"$ref":"#/components/schemas/CategoryAssociation"},"type":"array","title":"Category"},"contents":{"items":{"$ref":"#/components/schemas/BucketTask"},"type":"array","title":"Contents"},"duration":{"$ref":"#/components/schemas/DurationSummary"},"payout":{"$ref":"#/components/schemas/PayoutSummary"},"quality_score":{"type":"number","title":"Quality Score"},"currency":{"type":"string","title":"Currency","description":"This will always be 'USD'","default":"USD","examples":["USD"]},"eligibility_criteria":{"items":{"$ref":"#/components/schemas/SurveyEligibilityCriterion"},"type":"array","title":"Eligibility Criteria","description":"The reasons the user is eligible for tasks in this bucket"},"eligibility_explanation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eligibility Explanation","description":"Human-readable text explaining a user's eligibility for tasks in this bucket","examples":["You are a **47-year-old** **white** **male** with a *college degree*, who's employer's retirement plan is **Fidelity Investments**."]}},"additionalProperties":false,"type":"object","required":["id","uri","contents","duration","payout","quality_score"],"title":"TopNPlusBucket"},"TopNPlusOfferWall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/TopNPlusBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"TopNPlusOfferWall","description":"Same as the TopNOfferWall, but the buckets include contents.\n\nOfferwall code: `b145b803`"},"TopNPlusOfferWallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/TopNPlusOfferWall"}},"type":"object","required":["info","offerwall"],"title":"TopNPlusOfferWallResponse"},"TopNPlusRecontactBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]},"x":{"type":"integer","minimum":0.0,"title":"X","description":"For UI. Provides a dimensionality position for the bucket on the x-axis.","default":0,"examples":[0,1,2]},"y":{"type":"integer","minimum":0.0,"title":"Y","description":"For UI. Provides a dimensionality position for the bucket on the y-axis.","default":0,"examples":[0,1,2]},"name":{"type":"string","title":"Name","description":"Currently unused. Will always return empty string","default":""},"description":{"type":"string","title":"Description","description":"Currently unused. Will always return empty string","default":""},"category":{"items":{"$ref":"#/components/schemas/CategoryAssociation"},"type":"array","title":"Category"},"contents":{"items":{"$ref":"#/components/schemas/BucketTask"},"type":"array","title":"Contents"},"duration":{"$ref":"#/components/schemas/DurationSummary"},"payout":{"$ref":"#/components/schemas/PayoutSummary"},"quality_score":{"type":"number","title":"Quality Score"},"is_recontact":{"type":"boolean","title":"Is Recontact"},"currency":{"type":"string","title":"Currency","description":"This will always be 'USD'","default":"USD","examples":["USD"]}},"additionalProperties":false,"type":"object","required":["id","uri","contents","duration","payout","quality_score","is_recontact"],"title":"TopNPlusRecontactBucket"},"UPKImportance":{"properties":{"task_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Task Count","description":"The number of live Tasks that use this UPK Question","examples":[47]},"task_score":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Task Score","description":"GRL's internal ranked score for the UPK Question","examples":[0.11175522477414712]},"marketplace_task_count":{"anyOf":[{"additionalProperties":{"type":"integer","minimum":0.0},"propertyNames":{"$ref":"#/components/schemas/Source"},"type":"object"},{"type":"null"}],"title":"Marketplace Task Count","description":"The number of live Tasks that use this UPK Question per marketplace","examples":[{"d":23,"s":24}]}},"type":"object","title":"UPKImportance"},"USDeliveryAddress":{"properties":{"name_or_attn":{"type":"string","maxLength":50,"minLength":1,"title":"Name Or Attn"},"company":{"anyOf":[{"type":"string","maxLength":50,"minLength":1},{"type":"null"}],"title":"Company"},"phone_number":{"anyOf":[{"type":"string","maxLength":10,"minLength":10,"pattern":"^[0-9]+$"},{"type":"null"}],"title":"Phone Number"},"address":{"type":"string","maxLength":100,"minLength":1,"title":"Address"},"city":{"type":"string","maxLength":100,"minLength":1,"title":"City"},"state":{"type":"string","maxLength":2,"minLength":1,"title":"State"},"postal_code":{"type":"string","maxLength":10,"minLength":1,"title":"Postal Code"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["name_or_attn","address","city","state","postal_code"],"title":"USDeliveryAddress"},"UpkItem":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","examples":["497b1fedec464151b063cd5367643ffa"]},"label":{"type":"string","maxLength":255,"title":"Label","examples":["high_school_completion"]},"description":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Description","examples":["Completed high school"]}},"type":"object","required":["id","label"],"title":"UpkItem"},"UpkProperty":{"properties":{"property_id":{"type":"string","maxLength":32,"minLength":32,"title":"Property Id","examples":["2af5240ecd7d4a909a6caf5824bf4632"]},"property_label":{"type":"string","maxLength":255,"title":"Property Label","examples":["educational_attainment"]},"prop_type":{"$ref":"#/components/schemas/PropertyType","description":"\nAllowed values: \n - __i__ *(UPK_ITEM)*: UserProfileKnowledge Item\n - __n__ *(UPK_NUMERICAL)*: UserProfileKnowledge Numerical\n - __x__ *(UPK_TEXT)*: UserProfileKnowledge Text","default":"i"},"cardinality":{"$ref":"#/components/schemas/Cardinality","description":"\nAllowed values: \n - __*__ *(ZERO_OR_MORE)*: Zero or More\n - __?__ *(ZERO_OR_ONE)*: Zero or One","default":"?"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"},"gold_standard":{"type":"boolean","title":"Gold Standard","description":"A Gold-Standard question has been enumerated for all possible values (per country) as best as possible by GRL,allowing it to be mapped across inventory sources. A property not marked as Gold-Standard may have: 1) marketplace qid associations & 2) category associations, but doesn't have a defined 'range' (list of allowed itemsin a multiple choice question). This is used for exposing a user's profiling data & forthe Nudge API.","default":false},"allowed_items":{"anyOf":[{"items":{"$ref":"#/components/schemas/UpkItem"},"type":"array"},{"type":"null"}],"title":"Allowed Items"},"categories":{"items":{"$ref":"#/components/schemas/Category"},"type":"array","title":"Categories"}},"type":"object","required":["property_id","property_label","country_iso"],"title":"UpkProperty","description":"This used to be called \"QuestionInfo\", which is a bad name,\n as this describes a UPK Property, like \"educational_attainment\",\n not the question that asks for your education."},"UpkQuestion":{"properties":{"question_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Question Id"},"ext_question_id":{"anyOf":[{"type":"string","pattern":"^[a-z]{1,2}\\:.*"},{"type":"null"}],"title":"Ext Question Id","description":"what marketplace question this question links to"},"question_type":{"$ref":"#/components/schemas/UpkQuestionType"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"},"language_iso":{"type":"string","maxLength":3,"minLength":3,"pattern":"^[a-z]{3}$","title":"Language Iso"},"question_text":{"type":"string","minLength":1,"title":"Question Text","description":"The text shown to respondents"},"choices":{"anyOf":[{"items":{"$ref":"#/components/schemas/UpkQuestionChoice"},"type":"array"},{"type":"null"}],"title":"Choices"},"selector":{"anyOf":[{"$ref":"#/components/schemas/UpkQuestionSelectorMC"},{"$ref":"#/components/schemas/UpkQuestionSelectorTE"},{"$ref":"#/components/schemas/UpkQuestionSelectorSLIDER"},{"$ref":"#/components/schemas/UpkQuestionSelectorHIDDEN"}],"title":"Selector"},"configuration":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/UpkQuestionConfigurationMC"},{"$ref":"#/components/schemas/UpkQuestionConfigurationTE"},{"$ref":"#/components/schemas/UpkQuestionConfigurationSLIDER"}],"discriminator":{"propertyName":"type","mapping":{"MC":"#/components/schemas/UpkQuestionConfigurationMC","SLIDER":"#/components/schemas/UpkQuestionConfigurationSLIDER","TE":"#/components/schemas/UpkQuestionConfigurationTE"}}},{"type":"null"}],"title":"Configuration"},"validation":{"anyOf":[{"$ref":"#/components/schemas/UpkQuestionValidation"},{"type":"null"}]},"importance":{"anyOf":[{"$ref":"#/components/schemas/UPKImportance"},{"type":"null"}]},"categories":{"items":{"$ref":"#/components/schemas/Category"},"type":"array","title":"Categories","description":"Categories associated with this question"},"explanation_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Explanation Template","description":"Human-readable template for explaining how a user's answer to this question affects eligibility","examples":["The company that administers your employer's retirement plan is {answer}."]},"explanation_fragment_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Explanation Fragment Template","description":"A very short, natural-language explanation fragment that can be combined with others into a single sentence","examples":["whose employer's retirement plan is {answer}"]}},"type":"object","required":["question_type","country_iso","language_iso","question_text"],"title":"UpkQuestion","example":{"categories":[{"adwords_vertical_id":"396","label":"Politics","parent_uuid":"f66dddba61424ce5be2a38731450a0e1","path":"/News/Politics","uuid":"87b6d819f3ca4815bf1f135b1e829cc6"}],"choices":[{"choice_id":"1","choice_text":"Yes","exclusive":false,"order":0},{"choice_id":"2","choice_text":"No","exclusive":false,"order":1}],"country_iso":"us","importance":{"marketplace_task_count":{"d":9,"s":20,"w":20},"task_count":49,"task_score":3.3401743283265684},"language_iso":"eng","marketplace_task_count":{"d":9,"s":20,"w":20},"question_id":"fb20fd4773304500b39c4f6de0012a5a","question_text":"Are you registered to vote at your present address, or not?","question_type":"MC","selector":"SA","task_count":49,"task_score":3.3401743283265684}},"UpkQuestionChoice":{"properties":{"choice_id":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[\\w\\s\\.\\-]+$","title":"Choice Id","description":"The unique identifier for a response to a qualification"},"choice_text":{"type":"string","minLength":1,"title":"Choice Text","description":"The response text shown to respondents"},"order":{"type":"integer","minimum":0.0,"title":"Order"},"group":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Group"},"exclusive":{"type":"boolean","title":"Exclusive","description":"If answer is exclusive, it can be the only option selected","default":false},"importance":{"anyOf":[{"$ref":"#/components/schemas/UPKImportance"},{"type":"null"}]}},"type":"object","required":["choice_id","choice_text","order"],"title":"UpkQuestionChoice"},"UpkQuestionChoiceOut":{"properties":{"choice_id":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[\\w\\s\\.\\-]+$","title":"Choice Id","description":"The unique identifier for a response to a qualification"},"choice_text":{"type":"string","minLength":1,"title":"Choice Text","description":"The response text shown to respondents"},"order":{"type":"integer","minimum":0.0,"title":"Order"},"group":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Group"},"exclusive":{"type":"boolean","title":"Exclusive","description":"If answer is exclusive, it can be the only option selected","default":false},"importance":{"anyOf":[{"$ref":"#/components/schemas/UPKImportance"},{"type":"null"}]}},"type":"object","required":["choice_id","choice_text","order"],"title":"UpkQuestionChoiceOut"},"UpkQuestionConfigurationMC":{"properties":{"max_select":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Select"}},"additionalProperties":false,"type":"object","title":"UpkQuestionConfigurationMC"},"UpkQuestionConfigurationSLIDER":{"properties":{"slider_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slider Min"},"slider_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slider Max"},"slider_start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slider Start"},"slider_step":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slider Step"}},"type":"object","title":"UpkQuestionConfigurationSLIDER"},"UpkQuestionConfigurationTE":{"properties":{"max_length":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Length","description":"Maximum str length of any input. Meant as an easy, nonregex based check."},"min_length":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Min Length","description":"Minimum str length of any input. Meant as an easy, nonregex based check."}},"additionalProperties":false,"type":"object","title":"UpkQuestionConfigurationTE"},"UpkQuestionOut":{"properties":{"question_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Question Id"},"ext_question_id":{"anyOf":[{"type":"string","pattern":"^[a-z]{1,2}\\:.*"},{"type":"null"}],"title":"Ext Question Id","description":"what marketplace question this question links to"},"question_type":{"$ref":"#/components/schemas/UpkQuestionType"},"country_iso":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$","title":"Country Iso"},"language_iso":{"type":"string","maxLength":3,"minLength":3,"pattern":"^[a-z]{3}$","title":"Language Iso"},"question_text":{"type":"string","minLength":1,"title":"Question Text","description":"The text shown to respondents"},"choices":{"anyOf":[{"items":{"$ref":"#/components/schemas/UpkQuestionChoiceOut"},"type":"array"},{"type":"null"}],"title":"Choices"},"selector":{"anyOf":[{"$ref":"#/components/schemas/UpkQuestionSelectorMC"},{"$ref":"#/components/schemas/UpkQuestionSelectorTE"},{"$ref":"#/components/schemas/UpkQuestionSelectorSLIDER"},{"$ref":"#/components/schemas/UpkQuestionSelectorHIDDEN"}],"title":"Selector"},"configuration":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/UpkQuestionConfigurationMC"},{"$ref":"#/components/schemas/UpkQuestionConfigurationTE"},{"$ref":"#/components/schemas/UpkQuestionConfigurationSLIDER"}],"discriminator":{"propertyName":"type","mapping":{"MC":"#/components/schemas/UpkQuestionConfigurationMC","SLIDER":"#/components/schemas/UpkQuestionConfigurationSLIDER","TE":"#/components/schemas/UpkQuestionConfigurationTE"}}},{"type":"null"}],"title":"Configuration"},"validation":{"anyOf":[{"$ref":"#/components/schemas/UpkQuestionValidation"},{"type":"null"}]},"importance":{"anyOf":[{"$ref":"#/components/schemas/UPKImportance"},{"type":"null"}]},"categories":{"items":{"$ref":"#/components/schemas/Category"},"type":"array","title":"Categories","description":"Categories associated with this question"},"explanation_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Explanation Template","description":"Human-readable template for explaining how a user's answer to this question affects eligibility","examples":["The company that administers your employer's retirement plan is {answer}."]},"explanation_fragment_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Explanation Fragment Template","description":"A very short, natural-language explanation fragment that can be combined with others into a single sentence","examples":["whose employer's retirement plan is {answer}"]},"task_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Task Count","description":"The number of live Tasks that use this UPK Question","examples":[47]},"task_score":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Task Score","description":"GRL's internal ranked score for the UPK Question","examples":[0.11175522477414712]},"marketplace_task_count":{"anyOf":[{"additionalProperties":{"type":"integer","minimum":0.0},"propertyNames":{"$ref":"#/components/schemas/Source"},"type":"object"},{"type":"null"}],"title":"Marketplace Task Count","description":"The number of live Tasks that use this UPK Question per marketplace","examples":[{"d":23,"s":24}]}},"type":"object","required":["question_type","country_iso","language_iso","question_text"],"title":"UpkQuestionOut","example":{"categories":[{"adwords_vertical_id":"396","label":"Politics","parent_uuid":"f66dddba61424ce5be2a38731450a0e1","path":"/News/Politics","uuid":"87b6d819f3ca4815bf1f135b1e829cc6"}],"choices":[{"choice_id":"1","choice_text":"Yes","exclusive":false,"order":0},{"choice_id":"2","choice_text":"No","exclusive":false,"order":1}],"country_iso":"us","importance":{"marketplace_task_count":{"d":9,"s":20,"w":20},"task_count":49,"task_score":3.3401743283265684},"language_iso":"eng","marketplace_task_count":{"d":9,"s":20,"w":20},"question_id":"fb20fd4773304500b39c4f6de0012a5a","question_text":"Are you registered to vote at your present address, or not?","question_type":"MC","selector":"SA","task_count":49,"task_score":3.3401743283265684}},"UpkQuestionResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"questions":{"items":{"$ref":"#/components/schemas/UpkQuestionOut"},"type":"array","title":"Questions"},"consent_questions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Consent Questions","description":"For internal use"},"special_questions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Special Questions","description":"For internal use"},"count":{"type":"integer","minimum":0.0,"title":"Count","description":"The number of questions returned"}},"type":"object","required":["status","questions","count"],"title":"UpkQuestionResponse"},"UpkQuestionSelectorHIDDEN":{"type":"string","enum":["HIDDEN"],"title":"UpkQuestionSelectorHIDDEN"},"UpkQuestionSelectorMC":{"type":"string","enum":["SA","MA","DL","SB","MSB"],"title":"UpkQuestionSelectorMC"},"UpkQuestionSelectorSLIDER":{"type":"string","enum":["HSLIDER","VSLIDER"],"title":"UpkQuestionSelectorSLIDER"},"UpkQuestionSelectorTE":{"type":"string","enum":["SL","ML","ETB"],"title":"UpkQuestionSelectorTE"},"UpkQuestionType":{"type":"string","enum":["MC","TE","SLIDER","HIDDEN"],"title":"UpkQuestionType"},"UpkQuestionValidation":{"properties":{"patterns":{"anyOf":[{"items":{"$ref":"#/components/schemas/PatternValidation"},"type":"array","minItems":1},{"type":"null"}],"title":"Patterns"}},"type":"object","required":["patterns"],"title":"UpkQuestionValidation"},"User":{"properties":{"id":{"anyOf":[{"type":"integer","exclusiveMaximum":2147483648.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Id"},"uuid":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Uuid","examples":["8b33426cdc8548708b52b8389ca99125"]},"product":{"anyOf":[{"$ref":"#/components/schemas/Product"},{"type":"null"}]},"product_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Product Id","examples":["4fe381fb7186416cb443a38fa66c6557"]},"product_user_id":{"anyOf":[{"type":"string","maxLength":128,"minLength":3},{"type":"null"}],"title":"Product User Id","description":"A unique identifier for each user, which is set by the Supplier. It should not contain any sensitive informationlike email or names, and should avoid using anyincrementing values.","examples":["app-user-9329ebd"]},"blocked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blocked","default":false},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created","description":"When the user was created on the GRL platform."},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen","description":"When the user was last seen on, or acting on anypart of the GRL platform."},"audit_log":{"anyOf":[{"items":{"$ref":"#/components/schemas/AuditLog"},"type":"array"},{"type":"null"}],"title":"Audit Log"},"transactions":{"anyOf":[{"items":{"$ref":"#/components/schemas/LedgerTransaction"},"type":"array"},{"type":"null"}],"title":"Transactions"},"location_history":{"anyOf":[{"items":{"$ref":"#/components/schemas/GeoIPInformation"},"type":"array"},{"type":"null"}],"title":"Location History"}},"additionalProperties":false,"type":"object","title":"User"},"UserCreateConfig":{"properties":{"min_hourly_create_limit":{"type":"integer","minimum":0.0,"title":"Min Hourly Create Limit","description":"The smallest allowed value for the hourly user create limit.","default":0},"max_hourly_create_limit":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Hourly Create Limit","description":"The largest allowed value for the hourly user create limit. If None, the hourly create limit is unconstrained."}},"type":"object","title":"UserCreateConfig","description":"Stores configuration for the user creation experience.\n\nThe user creation limit is determined dynamically based on the median\n daily completion rate. min_hourly_create_limit &\n max_hourly_create_limit can be used to constrain the dynamically\n determined rate limit within set values."},"UserHealthConfig":{"properties":{"banned_countries":{"items":{"type":"string","maxLength":2,"minLength":2,"pattern":"^[a-z]{2}$"},"type":"array","title":"Banned Countries"},"allow_ban_iphist":{"type":"boolean","title":"Allow Ban Iphist","default":true}},"type":"object","title":"UserHealthConfig"},"UserInfo":{"properties":{"user_profile_knowledge":{"items":{"$ref":"#/components/schemas/UserProfileKnowledge"},"type":"array","title":"User Profile Knowledge"},"marketplace_profile_knowledge":{"items":{"$ref":"#/components/schemas/MarketProfileKnowledge"},"type":"array","title":"Marketplace Profile Knowledge"}},"type":"object","title":"UserInfo"},"UserInfoResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"user_profile":{"$ref":"#/components/schemas/UserInfo"}},"type":"object","required":["status","user_profile"],"title":"UserInfoResponse"},"UserLedgerTransactionTaskAdjustment":{"properties":{"created":{"type":"string","format":"date-time","title":"Created","description":"When the Transaction was created"},"description":{"type":"string","maxLength":255,"title":"Description","description":"External description suitable for UI","default":"Task Adjustment"},"amount":{"type":"integer","title":"Amount","description":"The net amount affecting the user's wallet, in USDCents. Positive means the user's balance increased; negative means it decreased.","examples":[500,-250]},"balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Balance After"},"tx_type":{"type":"string","const":"bp_adjustment","title":"Tx Type","default":"bp_adjustment"},"tsid":{"type":"string","maxLength":32,"minLength":32,"title":"Tsid","description":"A unique identifier for the session","examples":["a3848e0a53d64f68a74ced5f61b6eb68"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"A link to where the user can get more details about this transaction","readOnly":true},"amount_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount String","description":"The 'amount' with the payout_format applied.","readOnly":true}},"additionalProperties":false,"type":"object","required":["created","amount","tsid","url","amount_string"],"title":"UserLedgerTransactionTaskAdjustment","example":{"amount":-38,"amount_string":"$-0.38","created":"2026-02-18T07:03:18.644340Z","description":"Task Adjustment","tsid":"25d6081840694376b581f392653ac6fd","tx_type":"bp_adjustment","url":"https://fsb.generalresearch.com/d911167a994a470dbd3ded8b26ff431a/status/25d6081840694376b581f392653ac6fd/"}},"UserLedgerTransactionTaskComplete":{"properties":{"created":{"type":"string","format":"date-time","title":"Created","description":"When the Transaction was created"},"description":{"type":"string","maxLength":255,"title":"Description","description":"External description suitable for UI","default":"Task Complete"},"amount":{"type":"integer","title":"Amount","description":"The net amount affecting the user's wallet, in USDCents. Positive means the user's balance increased; negative means it decreased.","examples":[500,-250]},"balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Balance After"},"tx_type":{"type":"string","const":"bp_payment","title":"Tx Type","default":"bp_payment"},"tsid":{"type":"string","maxLength":32,"minLength":32,"title":"Tsid","description":"A unique identifier for the session","examples":["a3848e0a53d64f68a74ced5f61b6eb68"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"A link to where the user can get more details about this transaction","readOnly":true},"amount_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount String","description":"The 'amount' with the payout_format applied.","readOnly":true}},"additionalProperties":false,"type":"object","required":["created","amount","tsid","url","amount_string"],"title":"UserLedgerTransactionTaskComplete","description":"In a BP with user wallet enabled, the task-complete transaction would have line items\n for both the credit to the bp_wallet_account and credit to user_account. This\n is the user-detail, so we've only caring about the user's payment.","example":{"amount":38,"amount_string":"$0.38","created":"2026-02-18T07:03:18.644965Z","description":"Task Complete","tsid":"701ce08adc6d475487fba63412811133","tx_type":"bp_payment","url":"https://fsb.generalresearch.com/40894c77ac64432a994c00c1bf997bda/status/701ce08adc6d475487fba63412811133/"}},"UserLedgerTransactionTypeSummary":{"properties":{"entry_count":{"type":"integer","minimum":0.0,"title":"Entry Count","default":0},"min_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Amount","description":"positive or negative USDCent"},"max_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Amount","description":"positive or negative USDCent"},"total_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Amount","description":"positive or negative USDCent"}},"type":"object","title":"UserLedgerTransactionTypeSummary"},"UserLedgerTransactionTypesSummary":{"properties":{"bp_adjustment":{"$ref":"#/components/schemas/UserLedgerTransactionTypeSummary"},"bp_payment":{"$ref":"#/components/schemas/UserLedgerTransactionTypeSummary"},"user_bonus":{"$ref":"#/components/schemas/UserLedgerTransactionTypeSummary"},"user_payout_request":{"$ref":"#/components/schemas/UserLedgerTransactionTypeSummary"}},"type":"object","title":"UserLedgerTransactionTypesSummary"},"UserLedgerTransactionUserBonus":{"properties":{"created":{"type":"string","format":"date-time","title":"Created","description":"When the Transaction was created"},"description":{"type":"string","maxLength":255,"title":"Description","description":"External description suitable for UI","default":"Compensation Bonus"},"amount":{"type":"integer","title":"Amount","description":"The net amount affecting the user's wallet, in USDCents. Positive means the user's balance increased; negative means it decreased.","examples":[500,-250]},"balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Balance After"},"tx_type":{"type":"string","const":"user_bonus","title":"Tx Type","default":"user_bonus"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"A link to where the user can get more details about this transaction","readOnly":true},"amount_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount String","description":"The 'amount' with the payout_format applied.","readOnly":true}},"additionalProperties":false,"type":"object","required":["created","amount","url","amount_string"],"title":"UserLedgerTransactionUserBonus","example":{"amount":100,"amount_string":"$1.00","created":"2026-02-18T07:03:18.643773Z","description":"Compensation Bonus","tx_type":"user_bonus"}},"UserLedgerTransactionUserPayout":{"properties":{"created":{"type":"string","format":"date-time","title":"Created","description":"When the Transaction was created"},"description":{"type":"string","maxLength":255,"title":"Description","description":"External description suitable for UI"},"amount":{"type":"integer","title":"Amount","description":"The net amount affecting the user's wallet, in USDCents. Positive means the user's balance increased; negative means it decreased.","examples":[500,-250]},"balance_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Balance After"},"tx_type":{"type":"string","const":"user_payout_request","title":"Tx Type","default":"user_payout_request"},"payout_id":{"type":"string","maxLength":32,"minLength":32,"title":"Payout Id","description":"A unique identifier for the payout","examples":["a3848e0a53d64f68a74ced5f61b6eb68"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"A link to where the user can get more details about this transaction","readOnly":true},"amount_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount String","description":"The 'amount' with the payout_format applied.","readOnly":true}},"additionalProperties":false,"type":"object","required":["created","description","amount","payout_id","url","amount_string"],"title":"UserLedgerTransactionUserPayout","example":{"amount":-5,"amount_string":"$-0.05","created":"2026-02-18T07:03:18.643220Z","description":"HIT Reward","payout_id":"6734d18098a745719c71ccd36e4cbff1","tx_type":"user_payout_request","url":"https://fsb.generalresearch.com/fd768560e9ec4f77aa3d697d9961aa97/cashout/6734d18098a745719c71ccd36e4cbff1/"}},"UserLedgerTransactionsResponse":{"properties":{"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Page number","default":1},"size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Size","description":"Page size","default":50},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total","description":"Total number of results"},"transactions":{"items":{"oneOf":[{"$ref":"#/components/schemas/UserLedgerTransactionUserPayout"},{"$ref":"#/components/schemas/UserLedgerTransactionUserBonus"},{"$ref":"#/components/schemas/UserLedgerTransactionTaskAdjustment"},{"$ref":"#/components/schemas/UserLedgerTransactionTaskComplete"}],"discriminator":{"propertyName":"tx_type","mapping":{"bp_adjustment":"#/components/schemas/UserLedgerTransactionTaskAdjustment","bp_payment":"#/components/schemas/UserLedgerTransactionTaskComplete","user_bonus":"#/components/schemas/UserLedgerTransactionUserBonus","user_payout_request":"#/components/schemas/UserLedgerTransactionUserPayout"}}},"type":"array","title":"Transactions"},"summary":{"$ref":"#/components/schemas/UserLedgerTransactionTypesSummary"},"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pages","description":"Total number of pages","readOnly":true}},"type":"object","required":["summary","status","pages"],"title":"UserLedgerTransactionsResponse"},"UserProfile":{"properties":{"email_address":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email Address","examples":["contact@mail.com"]},"user":{"$ref":"#/components/schemas/User"},"marketplace_pids":{"additionalProperties":{"type":"string","maxLength":32,"minLength":32},"propertyNames":{"$ref":"#/components/schemas/Source"},"type":"object","title":"Marketplace Pids","description":"User's PID in marketplaces","examples":[{"c":"b507a2c00c3e481fb82f23655d142198","d":"deffe922063e4b9980206a62c3df2fba","i":"1dd9bd986794444eb97cb921aee5663f"}]},"streaks":{"items":{"$ref":"#/components/schemas/UserStreak"},"type":"array","title":"Streaks"},"email_md5":{"anyOf":[{"type":"string","maxLength":32,"minLength":32},{"type":"null"}],"title":"Email Md5","description":"MD5 hash of the email address","readOnly":true,"examples":["053fc3d5575362159e0c782abec83ffa"]},"email_sha1":{"anyOf":[{"type":"string","maxLength":40,"minLength":40},{"type":"null"}],"title":"Email Sha1","description":"SHA1 hash of the email address","readOnly":true,"examples":["6280fb76135b3585c0c5403be04844a0f0bae726"]},"email_sha256":{"anyOf":[{"type":"string","maxLength":64,"minLength":64},{"type":"null"}],"title":"Email Sha256","description":"SHA256 hash of the email address","readOnly":true,"examples":["8a098233e750f08de87d6053c06a58724287f34372368b6dc28b7ad4a77f3d39"]}},"additionalProperties":false,"type":"object","required":["user","email_md5","email_sha1","email_sha256"],"title":"UserProfile"},"UserProfileKnowledge":{"properties":{"property_id":{"type":"string","title":"Property Id"},"property_label":{"type":"string","title":"Property Label"},"translation":{"type":"string","title":"Translation"},"answer":{"items":{"$ref":"#/components/schemas/UserProfileKnowledgeAnswer"},"type":"array","title":"Answer"},"created":{"type":"string","format":"date-time","title":"Created","description":"When the User submitted this Profiling data"}},"type":"object","required":["property_id","property_label","translation","created"],"title":"UserProfileKnowledge"},"UserProfileKnowledgeAnswer":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"translation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Translation"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","title":"UserProfileKnowledgeAnswer"},"UserProfileResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"user_profile":{"$ref":"#/components/schemas/UserProfile"}},"type":"object","required":["status","user_profile"],"title":"UserProfileResponse"},"UserProfileUpdateRequest":{"properties":{"email_address":{"type":"string","format":"email","title":"Email Address","examples":["contact@mail.com"]}},"additionalProperties":false,"type":"object","required":["email_address"],"title":"UserProfileUpdateRequest"},"UserProfilesResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"user_profiles":{"items":{"$ref":"#/components/schemas/UserProfile"},"type":"array","title":"User Profiles"}},"type":"object","required":["status","user_profiles"],"title":"UserProfilesResponse"},"UserQuestionAnswerIn":{"properties":{"question_id":{"type":"string","maxLength":32,"minLength":32,"title":"Question Id","examples":["fb20fd4773304500b39c4f6de0012a5a"]},"answer":{"items":{"type":"string","maxLength":5000,"minLength":1},"type":"array","maxItems":10,"minItems":1,"title":"Answer","description":"The user's answers to this question. Must pass the choice_id if the question is a Multiple Choice, or the actual text if the question is Text Entry","examples":[["1"]]}},"additionalProperties":false,"type":"object","required":["question_id","answer"],"title":"UserQuestionAnswerIn","description":"Send the answers to one or more questions for a user. A question is\nuniquely specified by the question_id key. The answer is: the choice_id\nif the question_type is \"MC\" the actual entered text if the\nquestion_type is \"TE\"\n\nTODO: look up the question_type from the question_id to apply MC or\n TE specific validation on the answer(s)"},"UserStreak":{"properties":{"country_iso":{"type":"string","title":"Country Iso"},"period":{"$ref":"#/components/schemas/StreakPeriod"},"fulfillment":{"$ref":"#/components/schemas/StreakFulfillment"},"current_streak":{"type":"integer","minimum":0.0,"title":"Current Streak"},"longest_streak":{"type":"integer","minimum":0.0,"title":"Longest Streak"},"state":{"$ref":"#/components/schemas/StreakState"},"last_fulfilled_period_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Fulfilled Period Start"},"timezone_name":{"type":"string","title":"Timezone Name","readOnly":true},"current_period_bounds":{"prefixItems":[{"type":"string","format":"date-time"},{"type":"string","format":"date-time"}],"type":"array","maxItems":2,"minItems":2,"title":"Current Period Bounds","readOnly":true},"last_fulfilled_period_bounds":{"anyOf":[{"prefixItems":[{"type":"string","format":"date-time"},{"type":"string","format":"date-time"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Last Fulfilled Period Bounds","readOnly":true},"time_remaining_in_period":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time Remaining In Period","readOnly":true}},"additionalProperties":false,"type":"object","required":["country_iso","period","fulfillment","current_streak","longest_streak","state","timezone_name","current_period_bounds","last_fulfilled_period_bounds","time_remaining_in_period"],"title":"UserStreak"},"UserType":{"type":"string","enum":["business","cafe","cellular","college","content_delivery_network","consumer_privacy_network","government","hosting","library","military","residential","router","school","search_engine_spider","traveler"],"title":"UserType"},"UserWalletBalance":{"properties":{"amount":{"type":"integer","title":"Amount","description":"(USD cents) The amount in the user's wallet."},"redeemable_amount":{"type":"integer","minimum":0.0,"title":"Redeemable Amount","description":"(USD cents) The amount in the user's wallet this is currently redeemable."},"payout_format":{"type":"string","title":"Payout Format","description":"\nThe format describing the str representation of a payout. Typically, this would be displayed to a user.\nThe payout_format is similar to python format string with a subset of functionality supported.\nOnly float with a precision are supported along with an optional comma for a thousands separator.\nIn addition, a mathematical operator can be applied, such as dividing by 100. \nExamples are shown assuming payout = 100 (one dollar).\n- \"{payout*10:,.0f} Points\" -> \"1,000 Points\"\n- \"${payout/100:.2f}\" -> \"$1.00\"\n","examples":["{payout*10:,.0f} Points","${payout/100:.2f}","{payout:.0f}"]},"amount_string":{"type":"string","title":"Amount String","description":"The 'amount' with the payout_format applied. Can be displayed to the user."},"redeemable_amount_string":{"type":"string","title":"Redeemable Amount String","description":"The 'redeemable_amount' with the payout_format applied. Can be displayed to the user."}},"type":"object","required":["amount","redeemable_amount","payout_format","amount_string","redeemable_amount_string"],"title":"UserWalletBalance","example":{"amount":123,"amount_string":"1230 Points","payout_format":"{payout*10:,.0f} Points","redeemable_amount":100,"redeemable_amount_string":"1000 Points"}},"UserWalletBalanceResponse":{"properties":{"status":{"type":"string","enum":["success","error"],"title":"Status","description":"The status of the API response.","examples":["success"]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg","description":"An optional message, if the status is error.","examples":[""]},"wallet":{"$ref":"#/components/schemas/UserWalletBalance"}},"type":"object","required":["status","wallet"],"title":"UserWalletBalanceResponse"},"UserWalletConfig":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"If enabled, the users' wallets are managed.","default":false},"amt":{"type":"boolean","title":"Amt","description":"Uses Amazon Mechanical Turk","default":false},"supported_payout_types":{"items":{"$ref":"#/components/schemas/PayoutType"},"type":"array","uniqueItems":true,"title":"Supported Payout Types"},"min_cashout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Cashout","description":"Minimum cashout amount. If enabled is True and no min_cashout is set, will default to $0.01.","examples":["10.00"]}},"type":"object","title":"UserWalletConfig","description":"Stores configuration for the user wallet handling"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WXETOfferwall":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier to reference a generated offerwall","examples":["7dc1d3aeb4844a6fab17ecd370b8bf1e"]},"availability_count":{"type":"integer","minimum":0.0,"title":"Availability Count","description":"Total opportunities available for specific bpuid respondent and parameters. This value changes frequently and can be used to determine if a respondent has potential tasks available, regardless of the offerwall type being requested. If the value is 0, no buckets will be generated.","examples":[42]},"attempted_live_eligible_count":{"type":"integer","minimum":0.0,"title":"Attempted Live Eligible Count","description":"Number of currently live opportunities for which the respondent meets all eligibility criteria but is excluded due to a prior attempt. Only includes surveys that are still live and otherwise eligible; does not include previously attempted surveys that are no longer available.","default":0,"examples":[7]},"buckets":{"items":{"$ref":"#/components/schemas/WXETOfferwallBucket"},"type":"array","title":"Buckets"},"offerwall_reasons":{"items":{"$ref":"#/components/schemas/OfferwallReason"},"type":"array","title":"Offerwall Reasons","description":"Explanations describing why so many or few opportunities are available.","examples":[["USER_BLOCKED","UNDER_MINIMUM_AGE"]]}},"additionalProperties":false,"type":"object","required":["id","availability_count"],"title":"WXETOfferwall","description":"Returns buckets from WXET as single tasks\nOfferwall code: `55a4e1a9`"},"WXETOfferwallBucket":{"properties":{"id":{"type":"string","maxLength":32,"minLength":32,"title":"Id","description":"Unique identifier this particular bucket","examples":["5ba2fe5010cc4d078fc3cc0b0cc264c3"]},"uri":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Uri","description":"The URL to send a respondent into. Must not edit this URL in any way","examples":["https://task.generalresearch.com/api/v1/52d3f63b2709/797df4136c604a6c8599818296aae6d1/?i=5ba2fe5010cc4d078fc3cc0b0cc264c3&b=test&66482fb=e7baf5e"]},"duration":{"type":"integer","maximum":5400.0,"exclusiveMinimum":0.0,"title":"Duration","description":"The bucket's expected duration, in seconds"},"min_payout":{"type":"integer","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Min Payout","description":"The bucket's min payout, in usd cents"}},"additionalProperties":false,"type":"object","required":["id","uri","duration","min_payout"],"title":"WXETOfferwallBucket"},"WXETOfferwallResponse":{"properties":{"info":{"$ref":"#/components/schemas/OfferWallInfo"},"offerwall":{"$ref":"#/components/schemas/WXETOfferwall"}},"type":"object","required":["info","offerwall"],"title":"WXETOfferwallResponse"},"WallAdjustedStatus":{"type":"string","enum":["ac","af","ca","cc"],"title":"WallAdjustedStatus"},"WallOut":{"properties":{"uuid":{"type":"string","maxLength":32,"minLength":32,"title":"Uuid"},"source":{"$ref":"#/components/schemas/Source"},"buyer_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Buyer Id"},"req_survey_id":{"type":"string","maxLength":32,"title":"Req Survey Id"},"started":{"type":"string","format":"date-time","title":"Started"},"survey_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Survey Id"},"finished":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished"},"status":{"anyOf":[{"$ref":"#/components/schemas/Status"},{"type":"null"}]},"status_code_1":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"__High level status code for outcome of the session.__\nThis should only be NULL if the Status is ABANDON or TIMEOUT\n\nAllowed values: \n - __BUYER_FAIL__: User terminated in buyer survey\n - __BUYER_QUALITY_FAIL__: User terminated in buyer survey for quality reasons\n - __PS_FAIL__: User failed in marketplace's prescreener\n - __PS_QUALITY__: User rejected by marketplace for quality reasons\n - __PS_BLOCKED__: User is explicitly blocked by the marketplace. Note: on some marketplaces, users can have multiple PS_QUALITY terminations and still complete surveys.\n - __PS_OVERQUOTA__: User rejected by marketplace for over quota\n - __PS_DUPLICATE__: User rejected by marketplace for duplicate\n - __GRS_FAIL__: The user failed within the GRS Platform\n - __GRS_QUALITY_FAIL__: The user failed within the GRS Platform for quality reasons\n - __GRS_ABANDON__: The user abandoned/timed out within the GRS Platform\n - __PS_ABANDON__: The user abandoned/timed out within the marketplace's pre-screen system. Note: On most marketplaces, we have no way of distinguishing between this and BUYER_ABANDON. BUYER_ABANDON is used as the default, unless we know it is PS_ABANDON.\n - __BUYER_ABANDON__: The user abandoned/timed out within the client survey\n - __UNKNOWN__: The status code is not documented\n - __COMPLETE__: The user completed the task successfully\n - __MARKETPLACE_FAIL__: Something was wrong upon the user redirecting from the marketplace, e.g. no postback received, or url hashing failures.\n - __SESSION_START_FAIL__: User failed before being sent into a marketplace\n - __SESSION_CONTINUE_FAIL__: User failed between attempts\n - __SESSION_START_QUALITY_FAIL__: User failed before being sent into a marketplace for \"security\" reasons\n - __SESSION_CONTINUE_QUALITY_FAIL__: User failed between attempts for \"security\" reasons","examples":["COMPLETE"]},"status_code_2":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"This should be set if the Wall.status_code_1 is MARKETPLACE_FAIL\n\nAllowed values: \n - __URL_HASHING_CHECK_FAILED__: The redirect URL (coming back from the marketplace) failed hashing checks\n - __BROKEN_REDIRECT__: The redirect URL was missing required query params or was unparseable\n - __INVALID_REDIRECT__: The redirect URL was invalid or inconsistent in some way and as a result we could not determine the outcome. This could be if a redirect received did not match the user's most recent attempt.\n - __INVALID_MARKETPLACE_POSTBACK__: The redirect indicated a complete, but no/invalid Postback was received from the marketplace\n - __NO_MARKETPLACE_POSTBACK__: No/invalid Postback was received from the marketplace. Used in cases where the redirect does not contain a status.\n - __COMPLETE_TOO_FAST__: The marketplace indicates the user completed the survey, but we don't think this is valid due to speeding. Generally this cutoff is the 95th percentile of our calculated CompletionTime survey stat.\n - __INTERNAL_ERROR__: Something happened during the handling of this redirect (on our side)","examples":[null]},"ext_status_code_1":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ext Status Code 1"},"ext_status_code_2":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ext Status Code 2"},"ext_status_code_3":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ext Status Code 3"},"report_value":{"anyOf":[{"$ref":"#/components/schemas/ReportValue"},{"type":"null"}]},"report_notes":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Report Notes"},"adjusted_status":{"anyOf":[{"$ref":"#/components/schemas/WallAdjustedStatus"},{"type":"null"}]},"adjusted_timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Adjusted Timestamp"},"user_cpi":{"type":"integer","title":"User Cpi","description":"\n The amount the user would earn from completing this task, if the status was a complete.\n If the BP has no payout xform, the user_cpi is None. This is analogous to the session's\n user_payout.\n ","examples":[123]},"user_cpi_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Cpi String","description":"If a payout transformation is configured on this account, this is the amount to display to the user","examples":["123 Points"]}},"additionalProperties":false,"type":"object","required":["source","req_survey_id"],"title":"WallOut"},"WallStatusCode2":{"type":"integer","enum":[12,16,17,13,18,14,15],"title":"WallStatusCode2","description":"This should be set if the Wall.status_code_1 is MARKETPLACE_FAIL"},"YieldManConfig":{"properties":{"category_request":{"$ref":"#/components/schemas/OfferWallCategoryRequest"},"scoring_params":{"$ref":"#/components/schemas/OfferWallRequestYieldmanParams"}},"type":"object","title":"YieldManConfig"}}},"tags":[{"name":"Offerwall","description":"Generate and retrieve various offerwall groupings. These results should be called \"on the \n fly\" just before presenting the results to a respondent. Results greater than 3 minutes old should not be \n presented to the respondent. When a respondent takes any action on a generated offerwall (they go into a \n bucket), the offerwall should be discarded. Any subsequent bucket entrances will fail. The following reserved \n are reserved keywords. However, any additional query parameter that is provided, will be returned back in the \n TaskResponse response in the kwargs attribute.\n\n {'b', 'bp_user_id', 'bpuid', 'country_codes', 'country', 'cpi', 'currency', \n 'description', 'duration', 'entry_link', 'i', 'idx', 'info', 'ip', 'kwargs',\n 'l', 'lang_codes', 'languages', 'loi', 'name', 'payout', 'product_id', \n 'quality', 'quality_category', 'req_loi', 'status', 'task_uri', 'tasks', \n 'tsid', 'uri', 'url', 'country_iso', 'format', 'behavior'}"},{"name":"Status","description":"Retrieving the status of respondent attempts, either by brokerage account filtering, or a specific Task Status ID (TSID) that is provided in the redirect."}]} \ No newline at end of file
diff --git a/jb-ui/src/api_fsb/openapitools.json b/jb-ui/src/api_fsb/openapitools.json
new file mode 100644
index 0000000..a82623d
--- /dev/null
+++ b/jb-ui/src/api_fsb/openapitools.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
+ "spaces": 2,
+ "generator-cli": {
+ "version": "7.14.0"
+ }
+}
diff --git a/jb-ui/src/components/Footer.tsx b/jb-ui/src/components/Footer.tsx
new file mode 100644
index 0000000..9248ea0
--- /dev/null
+++ b/jb-ui/src/components/Footer.tsx
@@ -0,0 +1,36 @@
+import { useAppSelector } from "@/hooks";
+
+const Footer = () => {
+ const bpuid = useAppSelector(state => state.app.bpuid)
+ const assignment_id = useAppSelector(state => state.app.assignment_id)
+
+ return (
+ <div className="grid gap-1 grid-cols-1
+ md:grid-cols-3
+ text-xs">
+ <div>
+ <p>help: <a
+ href={`mailto:support@jamesbillings67.com?subject=AMT Support Request: (${(bpuid ?? '-')}) ${(assignment_id ?? '–')}`}>
+ support@jamesbillings67.com
+ </a>
+ </p>
+ </div>
+
+ <div>
+ <p>made with <span className="text-rose-500">♥</span> by <a
+ className="hover:cursor-pointer hover:text-pink"
+ href="https://instagram.com/x0xMaximus"
+ target="_blank">Max Nanis</a>
+ </p>
+ </div>
+
+ <div>
+ <p>open source</p>
+ </div>
+
+ </div>
+ )
+
+}
+
+export default Footer \ No newline at end of file
diff --git a/jb-ui/src/components/Leaderboard.tsx b/jb-ui/src/components/Leaderboard.tsx
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/jb-ui/src/components/Leaderboard.tsx
diff --git a/jb-ui/src/components/Profiling.tsx b/jb-ui/src/components/Profiling.tsx
new file mode 100644
index 0000000..9cefdda
--- /dev/null
+++ b/jb-ui/src/components/Profiling.tsx
@@ -0,0 +1,759 @@
+import {
+ UpkQuestionChoice
+} from "@/api_fsb";
+import {
+ ChevronRightIcon
+} from "lucide-react";
+import { KeyboardEvent, MouseEvent, useEffect, useRef, useState } from "react";
+
+import { useAppDispatch, useAppSelector } from "@/hooks";
+import { bpid } from "@/lib/utils";
+import {
+ createColumnHelper,
+ flexRender,
+ getCoreRowModel,
+ getFilteredRowModel,
+ getSortedRowModel,
+ RowModel,
+ RowSelectionState,
+ useReactTable,
+} from '@tanstack/react-table';
+import { clsx } from "clsx";
+
+import {
+ Pagination,
+ PaginationContent,
+ PaginationItem,
+ PaginationLink
+} from "@/components/ui/pagination";
+
+import {
+ addAnswers,
+ fetchNewQuestions,
+ goToNextQuestion,
+ ProfileQuestion,
+ questionsSelectors,
+ saveAnswer,
+ selectActiveQuestion,
+ selectActiveQuestionValidation,
+ selectAllQuestions,
+ setActiveQuestion
+} from "@/models/profilingQuestionsSlice";
+import { useSelector } from "react-redux";
+// import {motion} from "framer-motion"
+
+const TextEntry = () => {
+ const dispatch = useAppDispatch()
+
+ const activeQuestion = useSelector(selectActiveQuestion);
+ // const selectAnswer = useMemo(() => selectAnswerForQuestion(question), [question]);
+ // const selectAnswer = useSelector(selectAnswerForQuestion(question));
+ const metadata = activeQuestion?._metadata
+ const validation = activeQuestion?._validation
+ const bpuid = useAppSelector(state => state.app.bpuid)
+
+ if (!metadata) return null
+ if (!validation) return null
+
+ const error = validation?.errors.length > 0
+
+ const handleInputChange = (event: React.KeyboardEvent<HTMLInputElement>) => {
+ if (!activeQuestion.question_id) return;
+
+ const target = event.target as HTMLInputElement;
+ dispatch(addAnswers({ questionId: activeQuestion.question_id!, answers: [target.value] as string[] }))
+ };
+
+ const handleKeyPress = (event: KeyboardEvent<HTMLInputElement>) => {
+ if (!activeQuestion.question_id) return;
+ if (!bpuid) return;
+
+ if (event.key === 'Enter') {
+ dispatch(saveAnswer({ questionId: activeQuestion.question_id!, bpuid: bpuid }))
+ }
+ };
+
+ return (
+ <div className="px-6 my-6">
+ <input type="text"
+ id="text-entry-input"
+ aria-describedby=""
+ // defaultValue={answer?.values.length ? answer?.values[0] : ""}
+ onKeyUp={handleInputChange}
+ onKeyDown={handleKeyPress} // Use onKeyDown to listen for the key press
+ // title={error ? answer?.error_msg : ""}
+ className={clsx(
+ 'w-full border-1 rounded px-2 py-1',
+ error ?
+ 'border-red-500 focus-visible:ring-red-500' :
+ 'border-blue-50'
+ )}
+ />
+
+ {
+ validation.errors.map(e => {
+ return (
+ <p className="text-sm text-red-100 my-2">{e.message}</p>
+ )
+ })
+ }
+ </div>
+ )
+}
+
+
+export default function useKeyboardMode(
+ rowModel: RowModel<UpkQuestionChoice>,
+) {
+ // const [keyboardEnabled, setKeyboardEnabled] = useState(
+ // localStorage.getItem(keyboardMode) === "enabled",
+ // );
+ const rowRefs = useRef<(HTMLTableRowElement | null)[]>([]);
+
+ const dispatch = useAppDispatch()
+ const activeQuestion = useSelector(selectActiveQuestion);
+ const bpuid = useAppSelector(state => state.app.bpuid)
+
+ const keyboardSelectionIdxRef = useRef(0);
+
+ useEffect(() => {
+ const handleKeyDown = (event: KeyboardEvent) => {
+
+ if (!activeQuestion) return;
+ if (!bpuid) return;
+
+ // if (!keyboardEnabled) {
+ // return;
+ // }
+
+ const { key } = event;
+ const totalRows = rowRefs.current.length;
+ const prevIdx = keyboardSelectionIdxRef.current;
+ let nextIdx = prevIdx;
+
+ if (key === "ArrowDown") nextIdx = Math.min(prevIdx + 1, totalRows - 1);
+ if (key === "ArrowUp") nextIdx = Math.max(prevIdx - 1, 0);
+ if (key === " ") {
+ const active = document.activeElement as HTMLElement | null;
+
+ if (active?.tabIndex === 0) {
+ return;
+ } else {
+ rowModel.rows[keyboardSelectionIdxRef.current].toggleSelected();
+ }
+ }
+
+ if (event.key === 'Enter') {
+ dispatch(saveAnswer({ questionId: activeQuestion.question_id!, bpuid: bpuid }))
+ }
+
+
+ if (nextIdx !== prevIdx) {
+
+ rowRefs.current[prevIdx]?.classList.remove("bg-blue-400");
+ rowRefs.current[nextIdx]?.classList.add("bg-blue-400");
+
+ rowRefs.current[nextIdx]?.scrollIntoView({
+ behavior: "smooth",
+ block: "center",
+ });
+ keyboardSelectionIdxRef.current = nextIdx;
+ }
+ };
+
+ // I really don't know, and I don't really care enough to make this
+ // technically type'd correctly. - Max
+
+ // @ts-ignore
+ window.addEventListener("keydown", handleKeyDown);
+ // @ts-ignore
+ return () => window.removeEventListener("keydown", handleKeyDown);
+
+ }, [rowModel.rows]);
+
+ return {
+ // keyboardEnabled,
+ // setKeyboardEnabled,
+ rowRefs,
+ keyboardSelectionIdxRef,
+ };
+}
+
+const MultipleChoice = () => {
+ const dispatch = useAppDispatch()
+ const activeQuestion = useSelector(selectActiveQuestion);
+
+ // const error: Boolean = answer?.error_msg.length > 0
+ // console.log("Rendering MultipleChoice with answer:", answer, error)
+
+ // TODO! Retrieve store values to use as the initial state for the table
+ // This is useful for if they tab around before submitting the answer
+ const [rowSelection, setRowSelection] = useState<RowSelectionState>({});
+ const [globalFilter, setGlobalFilter] = useState('');
+
+ const handleRowSelectionChange = (updaterOrValue: RowSelectionState | ((old: RowSelectionState) => RowSelectionState)) => {
+ setRowSelection((oldSelection) => {
+ // Get the new selection state
+ const newSelection = typeof updaterOrValue === 'function'
+ ? updaterOrValue(oldSelection)
+ : updaterOrValue;
+
+ // Find which row was just selected/deselected
+ const changedRowId = Object.keys(newSelection).find(
+ key => newSelection[key] !== oldSelection[key]
+ );
+
+ if (!changedRowId) return newSelection;
+
+ // Get the actual row data
+ const row = table.getRow(changedRowId);
+ const rowData = row.original; // Your row data object
+
+ // Check if "None of the Above" was selected
+ const normalized = rowData.choice_text.trim().toLowerCase();
+ const isNoneOfTheAbove = (normalized === "none of the above") || (rowData.exclusive ?? false);
+ if (isNoneOfTheAbove && newSelection[changedRowId]) {
+ // Clear all other selections, keep only this one
+ return { [changedRowId]: true };
+ }
+
+ // Check if a regular option was selected while "None of the Above" exists
+ const noneOfTheAboveId = Object.keys(newSelection).find(id => {
+ const r = table.getRow(id);
+ const rowData = r.original as UpkQuestionChoice;
+
+ const normalized = rowData.choice_text.trim().toLowerCase();
+ const isNoneOfTheAbove = (normalized === "none of the above") || (rowData.exclusive ?? false);
+
+ return isNoneOfTheAbove && newSelection[id];
+ });
+
+ if (noneOfTheAboveId && changedRowId !== noneOfTheAboveId) {
+ // Remove "None of the Above" selection
+ const { [noneOfTheAboveId]: _, ...rest } = newSelection;
+ return rest;
+ }
+
+ return newSelection;
+ });
+ };
+
+ useEffect(() => {
+ if (!activeQuestion?.question_id) return;
+ // Run this anytime a rowSelection changes, to update
+ // the answer in the store
+ const selectedChoices = Object.keys(rowSelection)
+ dispatch(addAnswers({ questionId: activeQuestion.question_id, answers: selectedChoices }))
+ }, [rowSelection])
+
+ // Define columns
+ const columnHelper = createColumnHelper<UpkQuestionChoice>()
+ const columns = [
+ columnHelper.display({
+ id: 'select',
+ cell: ({ row }) => {
+ const canSelected = row.getCanSelect()
+
+ return (
+ <input
+ type="checkbox"
+ checked={row.getIsSelected()}
+ disabled={!row.getCanSelect()}
+ onChange={row.getToggleSelectedHandler()}
+ className={`w-4 h-4 rounded-0 border-slate-300 cursor-pointer
+ focus:outline-none focus:border-blue-500 focus:ring-blue-500
+ ${canSelected ? ' ' : 'hidden'}
+ `}
+ />
+ )
+ },
+ size: 20,
+ meta: {
+ align: 'center'
+ }
+ }),
+
+ columnHelper.accessor("choice_text", {
+ header: () => 'Choice Text',
+ cell: (info) => {
+ const text = info.getValue();
+ const selected = info.row.getIsSelected()
+ const canSelected = info.row.getCanSelect()
+
+ return (
+ <p className={`
+ w-max truncate
+ text-sm text-left pl-1
+ ${selected ? 'font-bold' : 'font-medium'}
+ ${canSelected ? 'text-blue-950' : 'text-blue-600'}
+ `}>
+ {text}
+ </p>
+ )
+ },
+ size: 380,
+ meta: {
+ align: 'left'
+ }
+ }),
+ ]
+
+ const table = useReactTable({
+ 'data': activeQuestion!.choices ?? [],
+ columns,
+ getRowId: (row) => row.choice_id,
+ state: {
+ rowSelection,
+ globalFilter,
+ },
+ // enableRowSelection: true,
+ enableRowSelection: (row) => {
+ // Allow deselection always, but limit new selections
+ const currentSelectionCount = Object.keys(rowSelection).length;
+ const isRowSelected = rowSelection[row.id];
+
+ const max_selection = activeQuestion?.selector === "SA" ? 1 : activeQuestion?.choices?.length ?? 10
+
+ // Allow if: row is already selected OR we haven't hit the limit
+ return isRowSelected || currentSelectionCount < max_selection;
+ },
+ onRowSelectionChange: handleRowSelectionChange,
+ onGlobalFilterChange: setGlobalFilter,
+ getCoreRowModel: getCoreRowModel(),
+ getSortedRowModel: getSortedRowModel(),
+ getFilteredRowModel: getFilteredRowModel(),
+ });
+
+ const selectedCount = table.getSelectedRowModel().rows.length;
+
+ //const { rowRefs, setKeyboardEnabled, keyboardSelectionIdxRef } = useKeyboardMode(table.getRowModel());
+ const { rowRefs } = useKeyboardMode(table.getRowModel());
+
+ return (
+ <>
+
+ {/* Controls */}
+ <div className="py-1">
+ <div className="flex flex-wrap gap-2">
+
+ {/* Search */}
+ <div className="flex-1">
+ <input
+ type="text"
+ placeholder="Search choices..."
+ value={globalFilter ?? ''}
+ onChange={e => setGlobalFilter(e.target.value)}
+ className="w-full px-4 py-1
+ border border-blue-900 bg-blue-400 rounded
+ text-white text-sm
+ focus:outline-none focus:ring-2 focus:ring-indigo-500"
+ />
+ </div>
+
+ {/* Selected Count */}
+ {selectedCount > 0 && (
+ <div className="flex items-center gap-2 px-2 py-1
+ border border-blue-900 text-blue-700 rounded font-medium
+ text-[10px]
+ hover:cursor-pointer hover:bg-blue-800 hover:text-white
+ "
+ onClick={() => setRowSelection({})}>
+ <span>{selectedCount} selected</span>
+ <button className="m-0 p-0 font-bold">✕</button>
+ </div>
+ )}
+
+ </div>
+ </div>
+
+ {/* Table */}
+ <div className="border border-blue-200 rounded max-h-[400px] overflow-y-auto
+ [&::-webkit-scrollbar]:h-[4px]
+ [&::-webkit-scrollbar]:w-1
+
+ [&::-webkit-scrollbar-track]:bg-blue-100
+ [&::-webkit-scrollbar-thumb]:bg-blue-300
+ ">
+ <table className="text-xs table-fixed border-collapse w-full">
+ <tbody className="w-full">
+ {table.getRowModel().rows.map((row, idx) => (
+ <tr key={row.id}
+ ref={(el) => {
+ rowRefs.current[idx] = el;
+ }}
+ onClick={() => row.toggleSelected()}
+ className={`cursor-pointer transition-colors w-full
+ ${row.getIsSelected() ? 'bg-blue-600 ' : ' '
+ }`}
+ >
+
+ {row.getVisibleCells().map((cell) => {
+ const align = cell.column.columnDef.meta?.align || 'left';
+ const alignClass = align === 'center' ? 'text-center' :
+ align === 'right' ? 'text-right' : 'text-left';
+
+ return (
+ <td key={cell.id}
+ className={`py-2 ${alignClass}`}
+ style={{
+ width: `${cell.column.getSize()}px`,
+ }}
+ >
+ {flexRender(cell.column.columnDef.cell, cell.getContext())}
+ </td>
+ )
+ })}
+
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ </div>
+
+ {/* Empty State */}
+ {table.getRowModel().rows.length === 0 && (
+ <div className="p-12 text-center text-blue-50 font-bold">
+ No items found matching your search
+ </div>
+ )}
+
+ {/* Footer */}
+ <div className="px-2 py-2 flex justify-between items-center
+ text-xs font-mono font-semibold text-blue-950
+ ">
+ <span>
+ Showing {table.getRowModel().rows.length} of {activeQuestion?.choices?.length} choices
+ </span>
+ {selectedCount > 0 && (
+ <span>
+ {selectedCount} choice{selectedCount !== 1 ? 's' : ''} selected
+ </span>
+ )}
+ </div>
+
+ </>
+ )
+
+}
+
+const ProfilingQuestionTitle = () => {
+ const activeQuestion = useSelector(selectActiveQuestion);
+ const question_active_tasks = activeQuestion?.importance?.task_count ?? 0
+
+ if (!activeQuestion) return null;
+
+ let text = activeQuestion?.question_text
+
+ if (activeQuestion.explanation_template && activeQuestion._validation?.isComplete && activeQuestion._metadata.answers.length == 1) {
+ const template = activeQuestion.explanation_template;
+ const pre_code = activeQuestion._metadata.answers[0];
+
+ const choice = activeQuestion.choices?.find(c => c.choice_id === pre_code)
+ const choice_text = choice ? choice.choice_text : "your answer"
+
+ text = template.replace("{answer}", choice_text)
+ }
+
+
+ return (
+ <div className="flex justify-between items-center px-2">
+
+ <h3 className="text-left text-sm font-bold m-0 p-0
+ inline-block
+ ">
+ {text}
+ </h3>
+
+ <div className="max-w-[70px] text-center m-0 p-0">
+ <h4 className="text-xs font-bold">
+ {question_active_tasks.toLocaleString()}
+ </h4>
+ <h5 className="text-[10px]">
+ Surveys use
+ this question
+ </h5>
+ </div>
+ </div>
+ )
+}
+
+const ProfilingQuestionSubmitButton = () => {
+ const dispatch = useAppDispatch()
+
+ const activeQuestion = useSelector(selectActiveQuestion);
+ const activeQuestionValidation = useSelector(selectActiveQuestionValidation)
+ const bpuid = useAppSelector(state => state.app.bpuid)
+
+ const handleOnClick = () => {
+ if (!activeQuestion) return
+ if (!activeQuestionValidation?.isComplete) return
+ if (!bpuid) return;
+
+ dispatch(saveAnswer({ questionId: activeQuestion.question_id!, bpuid: bpuid }))
+ }
+
+ return (
+ <button
+ type="submit"
+ className="cursor-pointer text-sm font-semibold
+ bg-blue-700 text-white py-1 px-4 rounded
+ hover:bg-blue-900 min-w-[148px]
+
+ disabled:bg-blue-700 disabled:text-rose-300
+ disabled:cursor-not-allowed
+ "
+ disabled={!activeQuestionValidation?.isComplete}
+ onClick={handleOnClick}
+ >
+ Answer Question
+ </button>
+ )
+}
+
+
+export const ProfileQuestionFull = () => {
+ const activeQuestion = useSelector(selectActiveQuestion);
+
+ const renderContent = () => {
+ if (!activeQuestion) return null;
+ switch (activeQuestion.question_type) {
+ case 'TE':
+ return <TextEntry />
+ case 'MC':
+ return <MultipleChoice />
+ default:
+ return <MultipleChoice />
+ }
+ };
+
+ if (!activeQuestion) return null
+
+ return (
+ <>
+ {/* {answer && answer.processing && (
+ <motion.div
+ className="bg-gray-300"
+ initial={{ width: "0%" }}
+ animate={{ width: "100%" }}
+ transition={{ duration: 1, ease: "easeInOut" }}
+ // onAnimationComplete={() => setLoading(false)}
+ />
+ )} */}
+
+ {renderContent()}
+ </>
+ )
+}
+
+const PaginationIcon: React.FC<{
+ question: ProfileQuestion, idx: number,
+}> = ({ question, idx }) => {
+ const dispatch = useAppDispatch()
+
+ // const answers = useAppSelector(state => state.answers)
+ const isActive = question._metadata?.isActive ?? false
+ const completed = question._validation?.isComplete ?? false
+
+ const handleSetQuestion = (evt: MouseEvent<HTMLAnchorElement>) => {
+ if (completed) {
+ evt.preventDefault()
+ } else {
+ dispatch(setActiveQuestion(question.question_id!))
+ }
+ }
+
+ return (
+ <PaginationItem>
+ <PaginationLink
+ href="#"
+ title={question.question_text}
+ isActive={isActive}
+ aria-disabled={!!completed}
+
+ onClick={handleSetQuestion}
+ className={clsx("cursor-pointer rounded border border-blue-300 text-blue-300 text-[10px] w-7 h-4",
+ {
+ "pointer-events-none cursor-not-allowed": completed,
+ "bg-blue-800 border-blue-800": isActive,
+ })}
+ >
+ {idx + 1}
+ </PaginationLink>
+ </PaginationItem>
+ )
+}
+
+const ProfilingQuestionPagination = () => {
+ const dispatch = useAppDispatch()
+
+ const questions = useSelector(selectAllQuestions)
+ const activeQuestion = useSelector(selectActiveQuestion)
+
+ // All the variables needed for a sliding window
+ const q_idx = questions.findIndex(q => q.question_id === activeQuestion!.question_id)
+
+ const handleNextClick = () => {
+ dispatch(goToNextQuestion());
+ };
+
+ const questionsWindow = (
+ items: ProfileQuestion[], currentIndex: number, windowSize: number = 5
+ ): ProfileQuestion[] => {
+ const half: number = Math.floor(windowSize / 2)
+ const total: number = items.length
+ let start: number = currentIndex - half
+ let end: number = currentIndex + half + 1
+
+ if (start < 0) {
+ end += Math.abs(start)
+ start = 0
+ }
+
+ // Adjust if window goes past the end
+ if (end > total) {
+ const overflow: number = end - total
+ start = Math.max(0, start - overflow)
+ end = total
+ }
+
+ return items.slice(start, end)
+ }
+
+ return (
+ <Pagination>
+ <PaginationContent>
+ {
+ questionsWindow(questions, q_idx).map(q => {
+ return <PaginationIcon
+ key={q.question_id}
+ question={q}
+ idx={questions.findIndex(qq => qq.question_id === q.question_id)}
+ />
+ })
+ }
+
+ <PaginationItem>
+ <PaginationLink
+ aria-label="Go to next page"
+ size="default"
+
+ className="rounded text-[10px] p-0 m-0
+ text-blue-300
+ border border-blue-100 text-blue-100
+ hover:bg-blue-800 hover:border-blue-800 hover:text-white
+ gap-1 px-2.5 sm:pr-2.5
+ h-4
+ w-13 sm:w-14
+ "
+ onClick={handleNextClick}
+ href="#"
+ >
+ <span className="block">Next</span>
+ <ChevronRightIcon />
+ </PaginationLink>
+
+ </PaginationItem>
+ </PaginationContent>
+ </Pagination>
+ )
+}
+
+const ProfilingHeader = () => {
+ const questions = useSelector(questionsSelectors.selectAll);
+
+ return (
+ <h2 className="text-xs font-mono font-bold p-0 m-0">
+ {questions.length} Profiling Questions
+ </h2>
+ )
+}
+
+const ProfilingModalBody = () => {
+ const activeQuestion = useSelector(selectActiveQuestion);
+
+ if (!activeQuestion) {
+ return (
+ <div className="p-5">
+ <h3 className="text-lg font-bold">No Profiling Questions Available</h3>
+ <p className="my-0 text-sm text-gray-600">Please check back later.</p>
+ </div>
+ )
+ }
+
+ return (
+ <div className="relative flex flex-col">
+ {/* <ProfilingQuestionPagination /> */}
+
+ <div className="flex-shrink-0">
+ <ProfilingQuestionTitle />
+ </div>
+
+ {/* Scrollable Content */}
+ <div className="flex-1 p-1">
+ <ProfileQuestionFull key={activeQuestion.question_id} />
+ </div>
+
+ {/* Sticky Footer */}
+ <div className="flex-shrink-0 bg-blue-600 p-1 flex justify-between
+ ">
+ <div className="justify-start">
+ <ProfilingQuestionPagination />
+ </div>
+ <div className="justify-end">
+ <ProfilingQuestionSubmitButton />
+ </div>
+ </div>
+
+ </div>
+ )
+}
+
+const Profiling = () => {
+ /* This is the main UI for any User Profiling (before entering a task). It's
+ primary window and position should be dedictated by it's parent so this
+ can be positioned as a window or a sidebar as needed.
+ */
+ const [showProfiling, setShowProfiling] = useState(false);
+
+ const dispatch = useAppDispatch()
+ const bpuid = useAppSelector(state => state.app.bpuid)
+
+ useEffect(() => {
+ if (!bpuid) return;
+ dispatch(fetchNewQuestions(bpuid));
+ }, [bpid, bpuid])
+
+ if (!bpuid) return null;
+
+ return (
+ <div className={clsx(
+ "fixed rounded bg-blue-500 text-white shadow-lg z-60 \
+ bottom-1 sm:bottom-6 \
+ left-1 sm:left-2",
+ showProfiling ? "w-[98vw] sm:w-[400px]" : "w-[220px]"
+ )}
+ >
+
+ <div className="bg-blue-600 rounded border-white-300
+ cursor-pointer py-1 px-4
+ hover:bg-blue-700 transition-colors duration-200"
+ onClick={() => setShowProfiling(!showProfiling)}
+ >
+ <ProfilingHeader />
+
+ <h4 className="text-[10px] text-center italic text-white-300 py-0">
+ (Click to {showProfiling ? 'hide' : 'show'})
+ </h4>
+ </div>
+
+ {showProfiling && (
+ <ProfilingModalBody />
+ )}
+
+ </div>
+ )
+}
+
+export {
+ Profiling
+};
diff --git a/jb-ui/src/components/Wallet.tsx b/jb-ui/src/components/Wallet.tsx
new file mode 100644
index 0000000..e4fc694
--- /dev/null
+++ b/jb-ui/src/components/Wallet.tsx
@@ -0,0 +1,464 @@
+import {
+ UserLedgerTransactionsResponse,
+ UserLedgerTransactionsResponseTransactionsInner,
+ WalletApi
+} from "@/api_fsb";
+import { useAppDispatch, useAppSelector } from "@/hooks";
+import { bpid, formatCentsToUSD, } from "@/lib/utils";
+import {
+ setTxPagination, setTxTotalItems, setTxTotalPages,
+ setUserLedgerSummary,
+ setUserLedgerTxs
+} from "@/models/appSlice";
+import {
+ RowData, createColumnHelper, flexRender, getCoreRowModel,
+ useReactTable
+} from "@tanstack/react-table";
+import moment from "moment";
+import { useEffect, useState } from "react";
+
+declare module '@tanstack/react-table' {
+ interface ColumnMeta<TData extends RowData, TValue> {
+ align?: 'left' | 'center' | 'right';
+ }
+}
+
+// Function to calculate background color based on balance
+const getBackgroundColor = (balance: number | undefined): string => {
+ if (balance === undefined || balance === null) return 'bg-blue-600';
+
+ if (balance > 0) {
+ return 'bg-blue-600';
+ } else if (balance <= -100) {
+ return 'bg-red-600';
+ } else {
+ // Interpolate between blue and red for values between 0 and -100
+ // progress goes from 0 (at balance = 0) to 1 (at balance = -100)
+ const progress = Math.abs(balance) / 100;
+
+ // Blue RGB: (37, 99, 235) - Tailwind blue-600
+ // Red RGB: (220, 38, 38) - Tailwind red-600
+ const r = Math.round(37 + (220 - 37) * progress);
+ const g = Math.round(99 + (38 - 99) * progress);
+ const b = Math.round(235 + (38 - 235) * progress);
+
+ return `rgb(${r}, ${g}, ${b})`;
+ }
+};
+
+
+const WalletHeader = () => {
+ const amount = useAppSelector(state => state.app.userWalletBalance)?.amount ?? 0
+
+ const bgStyle = typeof getBackgroundColor(amount) === 'string' &&
+ getBackgroundColor(amount).startsWith('bg-')
+ ? {}
+ : { backgroundColor: getBackgroundColor(amount) };
+
+ const bgClass = typeof getBackgroundColor(amount) === 'string' &&
+ getBackgroundColor(amount).startsWith('bg-')
+ ? getBackgroundColor(amount)
+ : '';
+
+ return (
+ <div className={`w-full py-1 px-1 text-white rounded ${bgClass}`}
+ style={bgStyle}
+ >
+ <h2 className="text-xs font-semibold flex justify-between items-center">
+ <span className="text-left">User Wallet:</span>
+
+ {amount >= 0 ? (
+ <span className='text-emerald-50'>
+ {`${formatCentsToUSD(Math.abs(amount))}`}
+ </span>
+ ) : (
+ <span className='text-rose-50'>
+ {`(${formatCentsToUSD(Math.abs(amount))})`}
+ </span>
+ )}
+
+ </h2>
+ </div>
+ )
+};
+
+const WalletSummary = () => {
+ const summary = useAppSelector(state => state.app.userLedgerSummary)
+
+ const survey_completes = summary?.bp_payment?.entry_count ?? 0
+ const survey_completes_f = (survey_completes ?? 0).toLocaleString('en-US')
+
+ const survey_adjustments = summary?.bp_adjustment?.entry_count ?? 0
+ const survey_adjustments_f = (survey_adjustments ?? 0).toLocaleString('en-US')
+
+ const min_payout: number = summary?.bp_payment?.min_amount ?? 0
+ const max_payout: number = summary?.bp_payment?.max_amount ?? 0
+ const adj_total: number = summary?.bp_adjustment?.total_amount ?? 0
+ const user_payments_total: number = (summary?.user_payout_request?.total_amount ?? 0) * -1
+
+ return (
+ <div className="grid grid-cols-[auto_1fr] text-xs">
+ <div className="label text-left">Completes:</div>
+ <div className="value text-right">{survey_completes_f} surveys</div>
+
+ <div className="label text-left">Avg Payouts:</div>
+ <div className="value text-right">{formatCentsToUSD(min_payout)} – {formatCentsToUSD(max_payout)}</div>
+
+ <div className="label text-left">Survey Adjustments:</div>
+ <div className="value text-right">{survey_adjustments_f}</div>
+
+ <div className="label text-left">Adjustment Amount:</div>
+ <div className="value text-right">
+ {adj_total >= 0 ? (
+ <span className='text-emerald-300'>
+ {`${formatCentsToUSD(adj_total)}`}
+ </span>
+ ) : (
+ <span className='text-rose-300'>
+ {`(${formatCentsToUSD(Math.abs(adj_total))})`}
+ </span>
+ )}
+ </div>
+
+ <div className="label text-left">User Payments:</div>
+ <div className="value text-right">
+ {user_payments_total >= 0 ? (
+ <span className='text-emerald-300'>
+ {`${formatCentsToUSD(user_payments_total)}`}
+ </span>
+ ) : (
+ <span className='text-rose-300'>
+ {`(${formatCentsToUSD(Math.abs(user_payments_total))})`}
+ </span>
+ )}
+
+ </div>
+ </div >
+ )
+};
+
+const WalletTransactionsHeader = () => {
+ const tx_cnt = useAppSelector(state => state.app.txTotalItems)
+ const txt_cnt_f = (tx_cnt ?? 0).toLocaleString('en-US')
+
+ const [showTx, setShowTx] = useState(false);
+
+ return (
+ <div className="w-full bg-blue-600 text-white rounded text-left">
+ <div className="hover:cursor-pointer hover:bg-blue-700 transition-colors duration-200"
+ onClick={() => setShowTx(!showTx)}>
+
+ <h2 className="text-xs font-semibold rounded flex justify-between
+ py-1 px-1"
+ onClick={() => setShowTx(!showTx)}
+ >
+ <span>Total Transactions:</span> <span>{txt_cnt_f}</span>
+ </h2>
+
+ <h4 className="text-[10px] text-center italic text-blue-300 py-1"
+ onClick={() => setShowTx(!showTx)}
+ >
+ (Click to {showTx ? 'hide' : 'show'})
+ </h4>
+
+ </div>
+
+ {showTx && (
+ <>
+ <WalletTransactions />
+ </>
+ )}
+
+ </div>
+ )
+};
+
+
+const WalletTransactions = () => {
+ const dispatch = useAppDispatch()
+ const bpuid = useAppSelector(state => state.app.bpuid)
+ const userLedgerTxs = useAppSelector(state => state.app.userLedgerTxs);
+
+ const txPagination = useAppSelector(state => state.app.txPagination);
+ const txTotalPages = useAppSelector(state => state.app.txTotalPages);
+
+ useEffect(() => {
+ if (!bpuid) return;
+
+ new WalletApi().getUserTransactionHistoryProductIdTransactionHistoryGet(
+ bpid, // productId
+ bpuid, // bpuid
+ undefined, // createdAfter
+ undefined, // createdBefore
+ "-created", // orderBy
+ txPagination.pageIndex + 1, // page
+ txPagination.pageSize // pageSize
+ ).then(res => {
+ const response = res.data as UserLedgerTransactionsResponse;
+ console.log("Wallet: fetched user ledger", response);
+ dispatch(setUserLedgerSummary(response.summary));
+
+ dispatch(setUserLedgerTxs(response.transactions ?? []))
+ dispatch(setTxTotalItems(response.total!))
+ dispatch(setTxTotalPages(response.pages!))
+ });
+
+ }, [bpuid, txPagination.pageIndex, txPagination.pageSize]);
+
+ const columnHelper = createColumnHelper<UserLedgerTransactionsResponseTransactionsInner>()
+ const columns = [
+ columnHelper.accessor('created', {
+ header: () => 'Date',
+ cell: (info) => moment(info.getValue()).format('M/D/YY H:mm'),
+ size: 110,
+ meta: {
+ align: 'left'
+ }
+ }),
+ columnHelper.accessor('description', {
+ header: () => 'Type',
+ cell: props => {
+ const desc = props.getValue();
+ switch (desc) {
+ case 'Task Complete':
+ return 'Survey 🎉';
+ case 'Task Adjustment':
+ return 'Reject ⚠️';
+ case 'Compensation Bonus':
+ return 'Bonus 🎁';
+ case 'HIT Bonus':
+ return 'Bonus';
+ case 'HIT Reward':
+ return 'Assignment';
+ default:
+ return desc;
+ }
+ },
+ size: 80,
+ meta: {
+ align: 'left'
+ }
+ }),
+ columnHelper.accessor('amount', {
+ header: () => 'Amount',
+ cell: (props) => {
+ const val = props.renderValue() as number;
+ const isPositive = val >= 0;
+ const emoji = isPositive ? "⬆\uFE0E" : "⬇\uFE0E";
+ const colorClass = isPositive ? 'font-variant-emoji-text text-emerald-300' : 'font-variant-emoji-text text-rose-300';
+
+ return (
+ <span className={colorClass}>
+ {`${emoji} ${formatCentsToUSD(Math.abs(val))}`}
+ </span>
+ )
+ },
+ size: 70,
+ meta: {
+ align: 'center'
+ }
+ }),
+ columnHelper.accessor('balance_after', {
+ header: () => 'Balance',
+ cell: (props) => {
+ const val = props.renderValue() as number;
+ const isPositive = val >= 0;
+ const colorClass = isPositive ? 'text-emerald-300' : 'text-rose-300';
+
+ return (
+ <>
+ {isPositive ? (
+ <span className={colorClass}>
+ {`${formatCentsToUSD(Math.abs(val))}`}
+ </span>
+ ) : (
+ <span className={colorClass}>
+ {`(${formatCentsToUSD(Math.abs(val))})`}
+ </span>
+ )}
+ </>
+ )
+ },
+ size: 70,
+ meta: {
+ align: 'center'
+ }
+ }),
+ ]
+
+ const table = useReactTable({
+ 'data': userLedgerTxs,
+ 'columns': columns,
+ getCoreRowModel: getCoreRowModel(),
+ manualPagination: true,
+ pageCount: txTotalPages,
+ onPaginationChange: (updater) => {
+ dispatch(setTxPagination(
+ typeof updater === 'function' ? updater(txPagination) : updater
+ ));
+ },
+ state: {
+ pagination: txPagination,
+ },
+ });
+
+ return (
+ <div className="w-full border-t-1 border-blue-800 p-2">
+ <table className="text-xs table-fixed border-collapse">
+ <thead className="font-bold">
+ {table.getHeaderGroups().map((headerGroup) => (
+
+ <tr key={headerGroup.id}>
+ {headerGroup.headers.map((header) => {
+ const align = header.column.columnDef.meta?.align || 'left';
+ const alignClass = align === 'center' ? 'text-center' : align === 'right' ? 'text-right' : 'text-left';
+
+ return (
+ <th
+ key={header.id}
+ className={`p-0 m-0 ${alignClass}`}
+ style={{
+ width: `${header.column.getSize()}px`,
+ }}
+ >
+ {flexRender(
+ header.column.columnDef.header,
+ header.getContext(),
+ )}
+ </th>
+ )
+ })}
+ </tr>
+ ))}
+ </thead>
+ <tbody>
+ {table.getRowModel().rows.map((row) => (
+ <tr key={row.id}>
+ {row.getVisibleCells().map((cell) => {
+ const align = cell.column.columnDef.meta?.align || 'left';
+ const alignClass = align === 'center' ? 'text-center' :
+ align === 'right' ? 'text-right' : 'text-left';
+
+ return (
+ <td key={cell.id}
+ className={`p-0 ${alignClass}`}
+ style={{
+ width: `${cell.column.getSize()}px`,
+ }}
+ >
+ {flexRender(cell.column.columnDef.cell, cell.getContext())}
+ </td>
+ )
+ })}
+ </tr>
+ ))}
+ </tbody>
+
+ <tfoot>
+ <tr>
+ <td colSpan={columns.length} className="p-2">
+ <div className="flex items-center justify-between text-xs">
+
+ {/* Page info */}
+ <div className="text-blue-50">
+ Page {table.getState().pagination.pageIndex + 1} of{' '}
+ {table.getPageCount()}
+ </div>
+
+ {/* Navigation buttons */}
+ <div className="flex gap-8 text-xs">
+ <button
+ onClick={() => table.previousPage()}
+ disabled={!table.getCanPreviousPage()}
+ className="px-3 py-1 border border-blue-200 rounded
+ font-variant-emoji-text
+ hover:cursor-pointer hover:bg-blue-700
+ disabled:opacity-50 disabled:cursor-not-allowed"
+ >
+ {'⬅\uFE0E'}
+ </button>
+ <button
+ onClick={() => table.nextPage()}
+ disabled={!table.getCanNextPage()}
+ className="px-3 py-1 border border-blue-200 rounded
+ font-variant-emoji-text
+ hover:cursor-pointer hover:bg-blue-700
+ disabled:opacity-50 disabled:cursor-not-allowed"
+ >
+ {'⮕\uFE0E'}
+ </button>
+ </div>
+
+ {/* Page size selector */}
+ <select
+ value={table.getState().pagination.pageSize}
+ onChange={e => table.setPageSize(Number(e.target.value))}
+ className="px-2 py-1 border border-blue-200 rounded
+ hover:cursor-pointer hover:bg-blue-700"
+ >
+ {[10, 20, 30, 40].map(pageSize => (
+ <option key={pageSize} value={pageSize}>
+ Show {pageSize}
+ </option>
+ ))}
+ </select>
+ </div>
+ </td>
+ </tr>
+ </tfoot>
+
+ </table>
+ </div>
+ )
+};
+
+
+const Wallet = () => {
+ const dispatch = useAppDispatch()
+ const bpuid = useAppSelector(state => state.app.bpuid)
+ const pagination = useAppSelector(state => state.app.txPagination);
+
+ useEffect(() => {
+ if (!bpuid) return;
+
+ new WalletApi().getUserTransactionHistoryProductIdTransactionHistoryGet(
+ bpid, // productId
+ bpuid, // bpuid
+ undefined, // createdAfter
+ undefined, // createdBefore
+ "-created", // orderBy
+ pagination.pageIndex + 1, // page
+ pagination.pageSize // pageSize
+ ).then(res => {
+ const response = res.data as UserLedgerTransactionsResponse;
+ dispatch(setUserLedgerSummary(response.summary));
+ dispatch(setUserLedgerTxs(response.transactions ?? []))
+
+ dispatch(setTxPagination({
+ pageIndex: (response.page ?? 1) - 1,
+ pageSize: response.size ?? 10,
+ }))
+ dispatch(setTxTotalItems(response.total ?? 0))
+ dispatch(setTxTotalPages(response.pages ?? 9))
+ });
+
+ }, [bpuid])
+
+ if (!bpuid) return null;
+
+ return (
+ <div className="fixed top-2 left-2 p-2 rounded
+ bg-blue-500 text-white shadow-lg z-50
+ font-mono
+ max-h-[calc(100vh-2.5rem)] overflow-y-auto
+ max-w-[96vw]
+ ">
+ <WalletHeader />
+ <WalletSummary />
+ <WalletTransactionsHeader />
+ </div>
+ )
+};
+
+
+export default Wallet; \ No newline at end of file
diff --git a/jb-ui/src/components/ui/button.tsx b/jb-ui/src/components/ui/button.tsx
new file mode 100644
index 0000000..b5ea4ab
--- /dev/null
+++ b/jb-ui/src/components/ui/button.tsx
@@ -0,0 +1,64 @@
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+import { Slot } from "radix-ui"
+
+import { cn } from "@/lib/utils"
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+ {
+ variants: {
+ variant: {
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
+ outline:
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
+ secondary:
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ ghost:
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+ icon: "size-9",
+ "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
+ "icon-sm": "size-8",
+ "icon-lg": "size-10",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ }
+)
+
+function Button({
+ className,
+ variant = "default",
+ size = "default",
+ asChild = false,
+ ...props
+}: React.ComponentProps<"button"> &
+ VariantProps<typeof buttonVariants> & {
+ asChild?: boolean
+ }) {
+ const Comp = asChild ? Slot.Root : "button"
+
+ return (
+ <Comp
+ data-slot="button"
+ data-variant={variant}
+ data-size={size}
+ className={cn(buttonVariants({ variant, size, className }))}
+ {...props}
+ />
+ )
+}
+
+export { Button, buttonVariants }
diff --git a/jb-ui/src/components/ui/checkbox.tsx b/jb-ui/src/components/ui/checkbox.tsx
new file mode 100644
index 0000000..0e2a6cd
--- /dev/null
+++ b/jb-ui/src/components/ui/checkbox.tsx
@@ -0,0 +1,30 @@
+import * as React from "react"
+import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
+import { CheckIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Checkbox({
+ className,
+ ...props
+}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {
+ return (
+ <CheckboxPrimitive.Root
+ data-slot="checkbox"
+ className={cn(
+ "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
+ className
+ )}
+ {...props}
+ >
+ <CheckboxPrimitive.Indicator
+ data-slot="checkbox-indicator"
+ className="grid place-content-center text-current transition-none"
+ >
+ <CheckIcon className="size-3.5" />
+ </CheckboxPrimitive.Indicator>
+ </CheckboxPrimitive.Root>
+ )
+}
+
+export { Checkbox }
diff --git a/jb-ui/src/components/ui/confetti.tsx b/jb-ui/src/components/ui/confetti.tsx
new file mode 100644
index 0000000..e0d353a
--- /dev/null
+++ b/jb-ui/src/components/ui/confetti.tsx
@@ -0,0 +1,146 @@
+import type { ReactNode } from "react"
+import React, {
+ createContext,
+ forwardRef,
+ useCallback,
+ useEffect,
+ useImperativeHandle,
+ useMemo,
+ useRef,
+} from "react"
+import type {
+ GlobalOptions as ConfettiGlobalOptions,
+ CreateTypes as ConfettiInstance,
+ Options as ConfettiOptions,
+} from "canvas-confetti"
+import confetti from "canvas-confetti"
+
+import { Button } from "@/components/ui/button"
+
+type Api = {
+ fire: (options?: ConfettiOptions) => void
+}
+
+type Props = React.ComponentPropsWithRef<"canvas"> & {
+ options?: ConfettiOptions
+ globalOptions?: ConfettiGlobalOptions
+ manualstart?: boolean
+ children?: ReactNode
+}
+
+export type ConfettiRef = Api | null
+
+const ConfettiContext = createContext<Api>({} as Api)
+
+// Define component first
+const ConfettiComponent = forwardRef<ConfettiRef, Props>((props, ref) => {
+ const {
+ options,
+ globalOptions = { resize: true, useWorker: true },
+ manualstart = false,
+ children,
+ ...rest
+ } = props
+ const instanceRef = useRef<ConfettiInstance | null>(null)
+
+ const canvasRef = useCallback(
+ (node: HTMLCanvasElement) => {
+ if (node !== null) {
+ if (instanceRef.current) return
+ instanceRef.current = confetti.create(node, {
+ ...globalOptions,
+ resize: true,
+ })
+ } else {
+ if (instanceRef.current) {
+ instanceRef.current.reset()
+ instanceRef.current = null
+ }
+ }
+ },
+ [globalOptions]
+ )
+
+ const fire = useCallback(
+ async (opts = {}) => {
+ try {
+ await instanceRef.current?.({ ...options, ...opts })
+ } catch (error) {
+ console.error("Confetti error:", error)
+ }
+ },
+ [options]
+ )
+
+ const api = useMemo(
+ () => ({
+ fire,
+ }),
+ [fire]
+ )
+
+ useImperativeHandle(ref, () => api, [api])
+
+ useEffect(() => {
+ if (!manualstart) {
+ ;(async () => {
+ try {
+ await fire()
+ } catch (error) {
+ console.error("Confetti effect error:", error)
+ }
+ })()
+ }
+ }, [manualstart, fire])
+
+ return (
+ <ConfettiContext.Provider value={api}>
+ <canvas ref={canvasRef} {...rest} />
+ {children}
+ </ConfettiContext.Provider>
+ )
+})
+
+// Set display name immediately
+ConfettiComponent.displayName = "Confetti"
+
+// Export as Confetti
+export const Confetti = ConfettiComponent
+
+interface ConfettiButtonProps extends React.ComponentProps<"button"> {
+ options?: ConfettiOptions &
+ ConfettiGlobalOptions & { canvas?: HTMLCanvasElement }
+}
+
+const ConfettiButtonComponent = ({
+ options,
+ children,
+ ...props
+}: ConfettiButtonProps) => {
+ const handleClick = async (event: React.MouseEvent<HTMLButtonElement>) => {
+ try {
+ const rect = event.currentTarget.getBoundingClientRect()
+ const x = rect.left + rect.width / 2
+ const y = rect.top + rect.height / 2
+ await confetti({
+ ...options,
+ origin: {
+ x: x / window.innerWidth,
+ y: y / window.innerHeight,
+ },
+ })
+ } catch (error) {
+ console.error("Confetti button error:", error)
+ }
+ }
+
+ return (
+ <Button onClick={handleClick} {...props}>
+ {children}
+ </Button>
+ )
+}
+
+ConfettiButtonComponent.displayName = "ConfettiButton"
+
+export const ConfettiButton = ConfettiButtonComponent
diff --git a/jb-ui/src/components/ui/dot-pattern.tsx b/jb-ui/src/components/ui/dot-pattern.tsx
new file mode 100644
index 0000000..9522b7f
--- /dev/null
+++ b/jb-ui/src/components/ui/dot-pattern.tsx
@@ -0,0 +1,156 @@
+import React, { useEffect, useId, useRef, useState } from "react"
+import { motion } from "motion/react"
+
+import { cn } from "@/lib/utils"
+
+/**
+ * DotPattern Component Props
+ *
+ * @param {number} [width=16] - The horizontal spacing between dots
+ * @param {number} [height=16] - The vertical spacing between dots
+ * @param {number} [x=0] - The x-offset of the entire pattern
+ * @param {number} [y=0] - The y-offset of the entire pattern
+ * @param {number} [cx=1] - The x-offset of individual dots
+ * @param {number} [cy=1] - The y-offset of individual dots
+ * @param {number} [cr=1] - The radius of each dot
+ * @param {string} [className] - Additional CSS classes to apply to the SVG container
+ * @param {boolean} [glow=false] - Whether dots should have a glowing animation effect
+ */
+interface DotPatternProps extends React.SVGProps<SVGSVGElement> {
+ width?: number
+ height?: number
+ x?: number
+ y?: number
+ cx?: number
+ cy?: number
+ cr?: number
+ className?: string
+ glow?: boolean
+ [key: string]: unknown
+}
+
+/**
+ * DotPattern Component
+ *
+ * A React component that creates an animated or static dot pattern background using SVG.
+ * The pattern automatically adjusts to fill its container and can optionally display glowing dots.
+ *
+ * @component
+ *
+ * @see DotPatternProps for the props interface.
+ *
+ * @example
+ * // Basic usage
+ * <DotPattern />
+ *
+ * // With glowing effect and custom spacing
+ * <DotPattern
+ * width={20}
+ * height={20}
+ * glow={true}
+ * className="opacity-50"
+ * />
+ *
+ * @notes
+ * - The component is client-side only ("use client")
+ * - Automatically responds to container size changes
+ * - When glow is enabled, dots will animate with random delays and durations
+ * - Uses Motion for animations
+ * - Dots color can be controlled via the text color utility classes
+ */
+
+export function DotPattern({
+ width = 16,
+ height = 16,
+ x = 0,
+ y = 0,
+ cx = 1,
+ cy = 1,
+ cr = 1,
+ className,
+ glow = false,
+ ...props
+}: DotPatternProps) {
+ const id = useId()
+ const containerRef = useRef<SVGSVGElement>(null)
+ const [dimensions, setDimensions] = useState({ width: 0, height: 0 })
+
+ useEffect(() => {
+ const updateDimensions = () => {
+ if (containerRef.current) {
+ const { width, height } = containerRef.current.getBoundingClientRect()
+ setDimensions({ width, height })
+ }
+ }
+
+ updateDimensions()
+ window.addEventListener("resize", updateDimensions)
+ return () => window.removeEventListener("resize", updateDimensions)
+ }, [])
+
+ const dots = Array.from(
+ {
+ length:
+ Math.ceil(dimensions.width / width) *
+ Math.ceil(dimensions.height / height),
+ },
+ (_, i) => {
+ const col = i % Math.ceil(dimensions.width / width)
+ const row = Math.floor(i / Math.ceil(dimensions.width / width))
+ return {
+ x: col * width + cx,
+ y: row * height + cy,
+ delay: Math.random() * 5,
+ duration: Math.random() * 3 + 2,
+ }
+ }
+ )
+
+ return (
+ <svg
+ ref={containerRef}
+ aria-hidden="true"
+ className={cn(
+ "pointer-events-none absolute inset-0 h-full w-full text-neutral-400/80",
+ className
+ )}
+ {...props}
+ >
+ <defs>
+ <radialGradient id={`${id}-gradient`}>
+ <stop offset="0%" stopColor="currentColor" stopOpacity="1" />
+ <stop offset="100%" stopColor="currentColor" stopOpacity="0" />
+ </radialGradient>
+ </defs>
+ {dots.map((dot) => (
+ <motion.circle
+ key={`${dot.x}-${dot.y}`}
+ cx={dot.x}
+ cy={dot.y}
+ r={cr}
+ fill={glow ? `url(#${id}-gradient)` : "currentColor"}
+ initial={glow ? { opacity: 0.4, scale: 1 } : {}}
+ animate={
+ glow
+ ? {
+ opacity: [0.4, 1, 0.4],
+ scale: [1, 1.5, 1],
+ }
+ : {}
+ }
+ transition={
+ glow
+ ? {
+ duration: dot.duration,
+ repeat: Infinity,
+ repeatType: "reverse",
+ delay: dot.delay,
+ ease: "easeInOut",
+ }
+ : {}
+ }
+ />
+ ))}
+ </svg>
+ )
+}
diff --git a/jb-ui/src/components/ui/field.tsx b/jb-ui/src/components/ui/field.tsx
new file mode 100644
index 0000000..db0dc12
--- /dev/null
+++ b/jb-ui/src/components/ui/field.tsx
@@ -0,0 +1,246 @@
+import { useMemo } from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+import { Label } from "@/components/ui/label"
+import { Separator } from "@/components/ui/separator"
+
+function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">) {
+ return (
+ <fieldset
+ data-slot="field-set"
+ className={cn(
+ "flex flex-col gap-6",
+ "has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldLegend({
+ className,
+ variant = "legend",
+ ...props
+}: React.ComponentProps<"legend"> & { variant?: "legend" | "label" }) {
+ return (
+ <legend
+ data-slot="field-legend"
+ data-variant={variant}
+ className={cn(
+ "mb-3 font-medium",
+ "data-[variant=legend]:text-base",
+ "data-[variant=label]:text-sm",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldGroup({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+ <div
+ data-slot="field-group"
+ className={cn(
+ "group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+const fieldVariants = cva(
+ "group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
+ {
+ variants: {
+ orientation: {
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
+ horizontal: [
+ "flex-row items-center",
+ "[&>[data-slot=field-label]]:flex-auto",
+ "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
+ ],
+ responsive: [
+ "flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto",
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
+ ],
+ },
+ },
+ defaultVariants: {
+ orientation: "vertical",
+ },
+ }
+)
+
+function Field({
+ className,
+ orientation = "vertical",
+ ...props
+}: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>) {
+ return (
+ <div
+ role="group"
+ data-slot="field"
+ data-orientation={orientation}
+ className={cn(fieldVariants({ orientation }), className)}
+ {...props}
+ />
+ )
+}
+
+function FieldContent({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+ <div
+ data-slot="field-content"
+ className={cn(
+ "group/field-content flex flex-1 flex-col gap-1.5 leading-snug",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldLabel({
+ className,
+ ...props
+}: React.ComponentProps<typeof Label>) {
+ return (
+ <Label
+ data-slot="field-label"
+ className={cn(
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4",
+ "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldTitle({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+ <div
+ data-slot="field-label"
+ className={cn(
+ "flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldDescription({ className, ...props }: React.ComponentProps<"p">) {
+ return (
+ <p
+ data-slot="field-description"
+ className={cn(
+ "text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance",
+ "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5",
+ "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldSeparator({
+ children,
+ className,
+ ...props
+}: React.ComponentProps<"div"> & {
+ children?: React.ReactNode
+}) {
+ return (
+ <div
+ data-slot="field-separator"
+ data-content={!!children}
+ className={cn(
+ "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
+ className
+ )}
+ {...props}
+ >
+ <Separator className="absolute inset-0 top-1/2" />
+ {children && (
+ <span
+ className="bg-background text-muted-foreground relative mx-auto block w-fit px-2"
+ data-slot="field-separator-content"
+ >
+ {children}
+ </span>
+ )}
+ </div>
+ )
+}
+
+function FieldError({
+ className,
+ children,
+ errors,
+ ...props
+}: React.ComponentProps<"div"> & {
+ errors?: Array<{ message?: string } | undefined>
+}) {
+ const content = useMemo(() => {
+ if (children) {
+ return children
+ }
+
+ if (!errors?.length) {
+ return null
+ }
+
+ const uniqueErrors = [
+ ...new Map(errors.map((error) => [error?.message, error])).values(),
+ ]
+
+ if (uniqueErrors?.length == 1) {
+ return uniqueErrors[0]?.message
+ }
+
+ return (
+ <ul className="ml-4 flex list-disc flex-col gap-1">
+ {uniqueErrors.map(
+ (error, index) =>
+ error?.message && <li key={index}>{error.message}</li>
+ )}
+ </ul>
+ )
+ }, [children, errors])
+
+ if (!content) {
+ return null
+ }
+
+ return (
+ <div
+ role="alert"
+ data-slot="field-error"
+ className={cn("text-destructive text-sm font-normal", className)}
+ {...props}
+ >
+ {content}
+ </div>
+ )
+}
+
+export {
+ Field,
+ FieldLabel,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+ FieldContent,
+ FieldTitle,
+}
diff --git a/jb-ui/src/components/ui/label.tsx b/jb-ui/src/components/ui/label.tsx
new file mode 100644
index 0000000..ef7133a
--- /dev/null
+++ b/jb-ui/src/components/ui/label.tsx
@@ -0,0 +1,22 @@
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+
+import { cn } from "@/lib/utils"
+
+function Label({
+ className,
+ ...props
+}: React.ComponentProps<typeof LabelPrimitive.Root>) {
+ return (
+ <LabelPrimitive.Root
+ data-slot="label"
+ className={cn(
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+export { Label }
diff --git a/jb-ui/src/components/ui/magic-card.tsx b/jb-ui/src/components/ui/magic-card.tsx
new file mode 100644
index 0000000..e6503d8
--- /dev/null
+++ b/jb-ui/src/components/ui/magic-card.tsx
@@ -0,0 +1,101 @@
+import React, { useCallback, useEffect } from "react"
+import { motion, useMotionTemplate, useMotionValue } from "motion/react"
+
+import { cn } from "@/lib/utils"
+
+interface MagicCardProps {
+ children?: React.ReactNode
+ className?: string
+ gradientSize?: number
+ gradientColor?: string
+ gradientOpacity?: number
+ gradientFrom?: string
+ gradientTo?: string
+}
+
+export function MagicCard({
+ children,
+ className,
+ gradientSize = 200,
+ gradientColor = "#262626",
+ gradientOpacity = 0.8,
+ gradientFrom = "#9E7AFF",
+ gradientTo = "#FE8BBB",
+}: MagicCardProps) {
+ const mouseX = useMotionValue(-gradientSize)
+ const mouseY = useMotionValue(-gradientSize)
+ const reset = useCallback(() => {
+ mouseX.set(-gradientSize)
+ mouseY.set(-gradientSize)
+ }, [gradientSize, mouseX, mouseY])
+
+ const handlePointerMove = useCallback(
+ (e: React.PointerEvent<HTMLDivElement>) => {
+ const rect = e.currentTarget.getBoundingClientRect()
+ mouseX.set(e.clientX - rect.left)
+ mouseY.set(e.clientY - rect.top)
+ },
+ [mouseX, mouseY]
+ )
+
+ useEffect(() => {
+ reset()
+ }, [reset])
+
+ useEffect(() => {
+ const handleGlobalPointerOut = (e: PointerEvent) => {
+ if (!e.relatedTarget) {
+ reset()
+ }
+ }
+
+ const handleVisibility = () => {
+ if (document.visibilityState !== "visible") {
+ reset()
+ }
+ }
+
+ window.addEventListener("pointerout", handleGlobalPointerOut)
+ window.addEventListener("blur", reset)
+ document.addEventListener("visibilitychange", handleVisibility)
+
+ return () => {
+ window.removeEventListener("pointerout", handleGlobalPointerOut)
+ window.removeEventListener("blur", reset)
+ document.removeEventListener("visibilitychange", handleVisibility)
+ }
+ }, [reset])
+
+ return (
+ <div
+ className={cn("group relative rounded-[inherit]", className)}
+ onPointerMove={handlePointerMove}
+ onPointerLeave={reset}
+ onPointerEnter={reset}
+ >
+ <motion.div
+ className="bg-border pointer-events-none absolute inset-0 rounded-[inherit] duration-300 group-hover:opacity-100"
+ style={{
+ background: useMotionTemplate`
+ radial-gradient(${gradientSize}px circle at ${mouseX}px ${mouseY}px,
+ ${gradientFrom},
+ ${gradientTo},
+ var(--border) 100%
+ )
+ `,
+ }}
+ />
+ <div className="bg-background absolute inset-px rounded-[inherit]" />
+ <motion.div
+ className="pointer-events-none absolute inset-px rounded-[inherit] opacity-0 transition-opacity duration-300 group-hover:opacity-100"
+ style={{
+ background: useMotionTemplate`
+ radial-gradient(${gradientSize}px circle at ${mouseX}px ${mouseY}px, ${gradientColor}, transparent 100%)
+ `,
+ opacity: gradientOpacity,
+ }}
+ />
+ <div className="relative">{children}</div>
+ </div>
+ )
+}
diff --git a/jb-ui/src/components/ui/pagination.tsx b/jb-ui/src/components/ui/pagination.tsx
new file mode 100644
index 0000000..1dcfb0c
--- /dev/null
+++ b/jb-ui/src/components/ui/pagination.tsx
@@ -0,0 +1,127 @@
+import * as React from "react"
+import {
+ ChevronLeftIcon,
+ ChevronRightIcon,
+ MoreHorizontalIcon,
+} from "lucide-react"
+
+import { cn } from "@/lib/utils"
+import { buttonVariants, type Button } from "@/components/ui/button"
+
+function Pagination({ className, ...props }: React.ComponentProps<"nav">) {
+ return (
+ <nav
+ role="navigation"
+ aria-label="pagination"
+ data-slot="pagination"
+ className={cn("mx-auto flex w-full justify-center", className)}
+ {...props}
+ />
+ )
+}
+
+function PaginationContent({
+ className,
+ ...props
+}: React.ComponentProps<"ul">) {
+ return (
+ <ul
+ data-slot="pagination-content"
+ className={cn("flex flex-row items-center gap-1", className)}
+ {...props}
+ />
+ )
+}
+
+function PaginationItem({ ...props }: React.ComponentProps<"li">) {
+ return <li data-slot="pagination-item" {...props} />
+}
+
+type PaginationLinkProps = {
+ isActive?: boolean
+} & Pick<React.ComponentProps<typeof Button>, "size"> &
+ React.ComponentProps<"a">
+
+function PaginationLink({
+ className,
+ isActive,
+ size = "icon",
+ ...props
+}: PaginationLinkProps) {
+ return (
+ <a
+ aria-current={isActive ? "page" : undefined}
+ data-slot="pagination-link"
+ data-active={isActive}
+ className={cn(
+ buttonVariants({
+ variant: isActive ? "outline" : "ghost",
+ size,
+ }),
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+function PaginationPrevious({
+ className,
+ ...props
+}: React.ComponentProps<typeof PaginationLink>) {
+ return (
+ <PaginationLink
+ aria-label="Go to previous page"
+ size="default"
+ className={cn("gap-1 px-2.5 sm:pl-2.5", className)}
+ {...props}
+ >
+ <ChevronLeftIcon />
+ <span className="hidden sm:block">Previous</span>
+ </PaginationLink>
+ )
+}
+
+function PaginationNext({
+ className,
+ ...props
+}: React.ComponentProps<typeof PaginationLink>) {
+ return (
+ <PaginationLink
+ aria-label="Go to next page"
+ size="default"
+ className={cn("gap-1 px-2.5 sm:pr-2.5", className)}
+ {...props}
+ >
+ <span className="hidden sm:block">Next</span>
+ <ChevronRightIcon />
+ </PaginationLink>
+ )
+}
+
+function PaginationEllipsis({
+ className,
+ ...props
+}: React.ComponentProps<"span">) {
+ return (
+ <span
+ aria-hidden
+ data-slot="pagination-ellipsis"
+ className={cn("flex size-9 items-center justify-center", className)}
+ {...props}
+ >
+ <MoreHorizontalIcon className="size-4" />
+ <span className="sr-only">More pages</span>
+ </span>
+ )
+}
+
+export {
+ Pagination,
+ PaginationContent,
+ PaginationLink,
+ PaginationItem,
+ PaginationPrevious,
+ PaginationNext,
+ PaginationEllipsis,
+}
diff --git a/jb-ui/src/components/ui/separator.tsx b/jb-ui/src/components/ui/separator.tsx
new file mode 100644
index 0000000..275381c
--- /dev/null
+++ b/jb-ui/src/components/ui/separator.tsx
@@ -0,0 +1,28 @@
+"use client"
+
+import * as React from "react"
+import * as SeparatorPrimitive from "@radix-ui/react-separator"
+
+import { cn } from "@/lib/utils"
+
+function Separator({
+ className,
+ orientation = "horizontal",
+ decorative = true,
+ ...props
+}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
+ return (
+ <SeparatorPrimitive.Root
+ data-slot="separator"
+ decorative={decorative}
+ orientation={orientation}
+ className={cn(
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
+ className
+ )}
+ {...props}
+ />
+ )
+}
+
+export { Separator }
diff --git a/jb-ui/src/components/ui/skeleton.tsx b/jb-ui/src/components/ui/skeleton.tsx
new file mode 100644
index 0000000..32ea0ef
--- /dev/null
+++ b/jb-ui/src/components/ui/skeleton.tsx
@@ -0,0 +1,13 @@
+import { cn } from "@/lib/utils"
+
+function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+ <div
+ data-slot="skeleton"
+ className={cn("bg-accent animate-pulse rounded-md", className)}
+ {...props}
+ />
+ )
+}
+
+export { Skeleton }
diff --git a/jb-ui/src/hooks.ts b/jb-ui/src/hooks.ts
new file mode 100644
index 0000000..02ff1b6
--- /dev/null
+++ b/jb-ui/src/hooks.ts
@@ -0,0 +1,11 @@
+// This file serves as a central hub for re-exporting pre-typed Redux hooks.
+import { useDispatch, useSelector, TypedUseSelectorHook } from 'react-redux'
+import type { AppDispatch, RootState } from '@/store'
+
+
+// Use throughout your app instead of plain `useDispatch` and `useSelector`
+// export const useAppDispatch: () => AppDispatch = useDispatch.withTypes<AppDispatch>()
+export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector.withTypes<RootState>()
+
+export const useAppDispatch: () => AppDispatch = useDispatch
+// export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
diff --git a/jb-ui/src/index.css b/jb-ui/src/index.css
new file mode 100644
index 0000000..1677b7b
--- /dev/null
+++ b/jb-ui/src/index.css
@@ -0,0 +1,141 @@
+/*@config "../tailwind.config.ts";*/
+
+@import "tailwindcss" important;
+@import "tw-animate-css";
+
+@theme {
+ --font-display: Verdana, sans-serif;
+}
+
+/*---break---*/
+@custom-variant dark (&:is(.dark *));
+
+/*$white: #ffffff;*/
+/*$black: #161616;*/
+/*$darkgrey: #282828;*/
+
+/*$grey: #E2E2E2;*/
+/*$green: #3D9970;*/
+/*$yellow: #E8E85F;*/
+/*$red: #85144B;*/
+/*$darkblue: #013740;*/
+/*---break---*/
+@theme inline {
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+ --radius-2xl: calc(var(--radius) + 8px);
+ --radius-3xl: calc(var(--radius) + 12px);
+ --radius-4xl: calc(var(--radius) + 16px);
+ --color-background: var(--background);
+ --color-foreground: var(--foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-secondary: var(--secondary);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-muted: var(--muted);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-accent: var(--accent);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-border: var(--border);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+}
+/*---break---*/
+:root {
+ --radius: 0.625rem;
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.145 0 0);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.145 0 0);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.145 0 0);
+ --primary: oklch(0.205 0 0);
+ --primary-foreground: oklch(0.985 0 0);
+ --secondary: oklch(0.97 0 0);
+ --secondary-foreground: oklch(0.205 0 0);
+ --muted: oklch(0.97 0 0);
+ --muted-foreground: oklch(0.556 0 0);
+ --accent: oklch(0.97 0 0);
+ --accent-foreground: oklch(0.205 0 0);
+ --destructive: oklch(0.577 0.245 27.325);
+ --border: oklch(0.922 0 0);
+ --input: oklch(0.922 0 0);
+ --ring: oklch(0.708 0 0);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.145 0 0);
+ --sidebar-primary: oklch(0.205 0 0);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.97 0 0);
+ --sidebar-accent-foreground: oklch(0.205 0 0);
+ --sidebar-border: oklch(0.922 0 0);
+ --sidebar-ring: oklch(0.708 0 0);
+}
+/*---break---*/
+.dark {
+ --background: oklch(0.145 0 0);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.205 0 0);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.205 0 0);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.922 0 0);
+ --primary-foreground: oklch(0.205 0 0);
+ --secondary: oklch(0.269 0 0);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.269 0 0);
+ --muted-foreground: oklch(0.708 0 0);
+ --accent: oklch(0.269 0 0);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.556 0 0);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.205 0 0);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.269 0 0);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.556 0 0);
+}
+/*---break---*/
+@layer base {
+ * {
+ @apply border-border outline-ring/50;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
+
diff --git a/jb-ui/src/main.tsx b/jb-ui/src/main.tsx
new file mode 100644
index 0000000..538bea2
--- /dev/null
+++ b/jb-ui/src/main.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import { Provider } from 'react-redux'
+import { store } from '@/store'
+import JBApp from "@/JBApp";
+
+const rootElement = document.getElementById('root');
+if (!rootElement) {
+ throw new Error('Failed to find the root element');
+}
+const root = ReactDOM.createRoot(rootElement);
+
+root.render(
+ <React.StrictMode>
+ <Provider store={store}>
+ <JBApp />
+ </Provider>
+ </React.StrictMode >
+); \ No newline at end of file
diff --git a/jb-ui/src/models/app.ts b/jb-ui/src/models/app.ts
new file mode 100644
index 0000000..95b4c11
--- /dev/null
+++ b/jb-ui/src/models/app.ts
@@ -0,0 +1,37 @@
+import {
+ UserWalletBalance, TopNPlusBucket, TaskStatusResponse,
+ UserLedgerTransactionTypesSummary,
+ UserLedgerTransactionsResponseTransactionsInner,
+ OfferwallReason
+} from "@/api_fsb";
+import { PaginationState } from '@tanstack/react-table';
+
+export interface App {
+ // Global IDs needed by GRL + MTurk
+ bpuid?: string;
+ assignment_id?: string;
+ turkSubmitTo?: string;
+
+ // Global UI settings
+ loi: number;
+ availability_count?: number;
+ attempted_live_eligible_count?: number;
+ offerwall_reasons: OfferwallReason[];
+
+ // The timestamp of when the currently requested bucket was requested. We want
+ // to save this to prevent it from sitting for longer than 120 seconds.
+ currentBucketRequested?: number; // Date.now() is a timestamp in ms
+ currentBuckets?: TopNPlusBucket[];
+ currentBucketEntered?: number; // Date.now() is a timestamp in ms
+ taskStatus?: TaskStatusResponse;
+
+ // Wallet stuff
+ userWalletBalance?: UserWalletBalance;
+ userLedgerSummary?: UserLedgerTransactionTypesSummary;
+ userLedgerTxCount?: number;
+ userLedgerTxs: UserLedgerTransactionsResponseTransactionsInner[];
+
+ txPagination: PaginationState;
+ txTotalItems?: number;
+ txTotalPages?: number;
+}
diff --git a/jb-ui/src/models/appSlice.ts b/jb-ui/src/models/appSlice.ts
new file mode 100644
index 0000000..87952d9
--- /dev/null
+++ b/jb-ui/src/models/appSlice.ts
@@ -0,0 +1,188 @@
+import {
+ TaskStatusResponse,
+ TopNPlusBucket,
+ UserLedgerTransactionsResponseTransactionsInner,
+ UserLedgerTransactionTypesSummary,
+ UserWalletBalance,
+ OfferwallReason
+} from "@/api_fsb";
+import { App } from "@/models/app";
+import { RootState } from "@/store";
+import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';
+import { PaginationState } from '@tanstack/react-table';
+import moment from "moment";
+
+const initialState: App = {
+ bpuid: undefined,
+ assignment_id: undefined,
+ loi: 1800,
+ currentBuckets: undefined,
+ currentBucketEntered: undefined,
+ taskStatus: undefined,
+ offerwall_reasons: [],
+
+ userWalletBalance: undefined,
+ userLedgerSummary: undefined,
+ userLedgerTxCount: undefined,
+ userLedgerTxs: [],
+
+ txPagination: { pageIndex: 0, pageSize: 10 },
+ txTotalItems: undefined,
+ txTotalPages: undefined
+} as App
+
+const appSlice = createSlice({
+ name: 'app',
+ initialState,
+ reducers: {
+
+ setProductUserID(state, action: PayloadAction<string>) {
+ state.bpuid = action.payload;
+ },
+
+ setAssignmentID(state, action: PayloadAction<string>) {
+ // This is really so silly. Amazon should simply not send
+ // anything if it's unavailable.
+ if (action.payload === "ASSIGNMENT_ID_NOT_AVAILABLE") {
+ state.assignment_id = undefined;
+ }
+ state.assignment_id = action.payload;
+ },
+
+ setTurkSubmitTo(state, action: PayloadAction<string>) {
+ state.turkSubmitTo = action.payload;
+ },
+
+ setLOI(state, action: PayloadAction<number>) {
+ state.loi = action.payload;
+ },
+
+ setAvailabilityCount(state, action: PayloadAction<number>) {
+ state.availability_count = action.payload
+ },
+
+ setAttemptedLiveEligibleCount(state, action: PayloadAction<number>) {
+ state.attempted_live_eligible_count = action.payload
+ },
+
+ setCurrentBuckets(state, action: PayloadAction<TopNPlusBucket[] | undefined>) {
+ state.currentBucketRequested = moment.utc().unix();
+ state.currentBuckets = action.payload
+ },
+
+ setOfferwallReasons(state, action: PayloadAction<OfferwallReason[]>) {
+ state.offerwall_reasons = action.payload;
+ },
+
+ setEnteredTimestamp(state) {
+ // Go back by 2 seconds to account for any time drift
+ state.currentBucketEntered = moment.utc().unix() - 2;
+ },
+
+ setTaskStatus(state, action: PayloadAction<TaskStatusResponse>) {
+ state.taskStatus = action.payload;
+
+ state.bpuid = action.payload.product_user_id;
+ },
+
+ setUserWalletBalance(state, action: PayloadAction<UserWalletBalance>) {
+ state.userWalletBalance = action.payload;
+ },
+
+ setUserLedgerSummary(state, action: PayloadAction<UserLedgerTransactionTypesSummary>) {
+ state.userLedgerSummary = action.payload;
+ },
+
+ setUserLedgerTxs(state, action: PayloadAction<UserLedgerTransactionsResponseTransactionsInner[]>) {
+ // We're not appending the transaction details, it's only going
+ // to reassign the current page of Transactions.
+ state.userLedgerTxs = action.payload;
+ },
+
+ setTxPagination(state, action: PayloadAction<PaginationState>) {
+ state.txPagination = action.payload;
+ },
+
+ setTxTotalItems(state, action: PayloadAction<number>) {
+ state.txTotalItems = action.payload;
+ },
+
+ setTxTotalPages(state, action: PayloadAction<number>) {
+ state.txTotalPages = action.payload;
+ }
+
+ }
+})
+
+export const {
+ setProductUserID,
+ setAssignmentID,
+ setTurkSubmitTo,
+ setLOI,
+ setAvailabilityCount,
+ setAttemptedLiveEligibleCount,
+ setOfferwallReasons,
+ setCurrentBuckets,
+ setEnteredTimestamp,
+ setTaskStatus,
+
+ setUserWalletBalance,
+
+ setUserLedgerSummary,
+ setUserLedgerTxs,
+
+ setTxPagination,
+ setTxTotalItems,
+ setTxTotalPages
+} = appSlice.actions;
+
+export default appSlice.reducer
+
+export const getLOIText = createSelector(
+ [(state: RootState) => state.app],
+ (app_config): string => {
+
+ const lookup: Record<number, string> = {
+ 600: "ten",
+ 1200: "twenty",
+ 1800: "thirty",
+ };
+
+ return lookup[app_config.loi] || " – ";
+ }
+);
+
+export const getAvailabilityCount = createSelector(
+ [(state: RootState) => state.app],
+ (app_config): number | undefined => {
+ return app_config.availability_count;
+ }
+);
+
+export const isLowBalance = createSelector(
+ [(state: RootState) => state.app],
+ (app_config): boolean => {
+ const bal_amt = app_config.userWalletBalance?.amount ?? 0
+ return bal_amt <= -90;
+ }
+);
+
+
+export const selectBucket = createSelector(
+ [
+ (state: RootState) => state.app.currentBuckets,
+ ],
+ (buckets): TopNPlusBucket | null => {
+ if (buckets && buckets.length >= 1) {
+ return buckets[0]
+ }
+ return null;
+ }
+);
+
+export const getSurveyURL = createSelector(
+ [selectBucket],
+ (bucket): string | null => {
+ return bucket?.uri || null;
+ }
+); \ No newline at end of file
diff --git a/jb-ui/src/models/grlStatsSlice.ts b/jb-ui/src/models/grlStatsSlice.ts
new file mode 100644
index 0000000..9385256
--- /dev/null
+++ b/jb-ui/src/models/grlStatsSlice.ts
@@ -0,0 +1,54 @@
+import { StatsSnapshot } from "@/api_fsb";
+import { RootState } from "@/store";
+import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';
+
+
+const initialState: StatsSnapshot[] = []
+
+const grlStatsSlice = createSlice({
+ name: 'grlStats',
+ initialState,
+ reducers: {
+
+ addStatsData(state, action: PayloadAction<StatsSnapshot>) {
+ state.push(action.payload);
+ }
+ }
+})
+
+export const {
+ addStatsData
+} = grlStatsSlice.actions;
+export default grlStatsSlice.reducer
+
+
+export const selectRecentStats = createSelector(
+ [
+ (state: RootState) => state.stats,
+ ],
+ (stats): StatsSnapshot | null => {
+ const lastStat = stats[stats.length - 1];
+ return lastStat ?? null;
+ }
+);
+
+export const activeUsers = createSelector(
+ [selectRecentStats],
+ (recentStats): number | null => {
+ return recentStats?.active_users_last_24h ?? null;
+ }
+);
+
+export const activeSurveys = createSelector(
+ [selectRecentStats],
+ (recentStats): number | null => {
+ return recentStats?.live_task_count?.total ?? null;
+ }
+);
+
+export const maxPayout = createSelector(
+ [selectRecentStats],
+ (recentStats): number | null => {
+ return recentStats?.live_tasks_max_payout?.value ?? null;
+ }
+);
diff --git a/jb-ui/src/models/profilingQuestionsSlice.ts b/jb-ui/src/models/profilingQuestionsSlice.ts
new file mode 100644
index 0000000..cc36f17
--- /dev/null
+++ b/jb-ui/src/models/profilingQuestionsSlice.ts
@@ -0,0 +1,436 @@
+import {
+ BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost,
+ ProfilingQuestionsApi,
+ StatusResponse,
+ UpkQuestion, UserQuestionAnswerIn
+} from "@/api_fsb";
+import { assert, bpid } from "@/lib/utils";
+import { questionUtils } from "@/models/profilingUtils";
+import type { RootState } from '@/store';
+import {
+ createAsyncThunk,
+ createEntityAdapter, createSlice,
+ PayloadAction,
+ WritableDraft
+} from '@reduxjs/toolkit';
+
+interface UpkQuestionMetadata {
+ // The data we need to conduct profiling questions and manager user
+ // submission along with the User Interfaces
+
+ // Only one Question can be active at a time, which is the one
+ // being shown to the Respondent
+ isActive: boolean;
+
+ answers: string[];
+
+ // If it's actively being submitted to the server
+ isProcessing: boolean;
+
+ // If we recieved a successful response from the server after submitting
+ isSaved: boolean;
+}
+
+interface ValidationResult {
+ // If isValid or isComplete are undefined, that means the question
+ // hasn't been validated yet. This is different from false, which means
+ // it has been validated and is not valid.
+ isValid?: boolean;
+ isComplete?: boolean;
+ errors: ValidationError[];
+};
+
+export interface ValidationError {
+ path: string; // e.g., "user.email"
+ message: string;
+ severity: 'error' | 'warning';
+};
+
+export interface ProfileQuestion extends UpkQuestion {
+ _metadata: UpkQuestionMetadata;
+ _validation: ValidationResult;
+}
+
+// Entity adapter for normalized storage
+const questionsAdapter = createEntityAdapter({
+ selectId: (model: ProfileQuestion) => model.question_id!,
+ sortComparer: (a, b) => {
+ return (b.importance?.task_score ?? 0) - (a.importance?.task_score ?? 0);
+ },
+});
+
+
+function getDefaultMetadata(): UpkQuestionMetadata {
+ return {
+ isActive: false,
+ answers: [],
+ isProcessing: false,
+ isSaved: false,
+ };
+}
+
+function getDefaultValidation(): ValidationResult {
+
+ return {
+ isValid: undefined,
+ isComplete: undefined,
+ errors: [],
+ };
+}
+
+// Create the async thunk (outside your slice)
+export const saveAnswer = createAsyncThunk(
+ 'profilingQuestions/saveAnswer',
+ async ({ questionId, bpuid }: { questionId: string; bpuid: string }, { getState, dispatch }) => {
+ const state = getState() as RootState;
+ const question = state.profilingQuestions.entities[questionId];
+
+ // Validations
+ const answers = {
+ 'question_id': question.question_id!,
+ 'answer': question._metadata.answers
+ } as UserQuestionAnswerIn;
+
+ const answers_body = {
+ 'answers': [answers]
+ } as BodySubmitProfilingQuestionsProductIdProfilingQuestionsPost;
+
+ // Make API call
+ const res = await new ProfilingQuestionsApi()
+ .submitProfilingQuestionsProductIdProfilingQuestionsPost(
+ bpid,
+ bpuid,
+ answers_body,
+ undefined,
+ true
+ );
+
+ const response = res.data as StatusResponse;
+
+ // Check if we need to fetch new questions BEFORE returning
+ if (response.status === "success" && isFirstNonGR(state.profilingQuestions)) {
+ // NOW dispatch it
+ dispatch(fetchNewQuestions(bpuid));
+ }
+
+ return { questionId, response };
+
+ }
+)
+
+export const fetchNewQuestions = createAsyncThunk(
+ 'profilingQuestions/fetchNewQuestions',
+ async (bpuid: string) => {
+
+ console.log("profilingQuestions/fetchNewQuestions")
+ const res = await new ProfilingQuestionsApi()
+ .getProfilingQuestionsProductIdProfilingQuestionsGet(
+ bpid,
+ bpuid,
+ undefined, // "104.9.125.144", // ip
+ undefined, // countryIso
+ undefined, // languageIso
+ 2_500
+ );
+ return res.data.questions;
+ }
+);
+
+type ProfilingQuestionsState = ReturnType<typeof profilingQuestionSlice.getInitialState>;
+
+
+// Helper function that contains the logic (outside the slice)
+function goToNextQuestionLogic(state: WritableDraft<ProfilingQuestionsState>) {
+ const allQuestions = questionsAdapter.getSelectors().selectAll(state);
+ const currentIndex = allQuestions.findIndex(q => q._metadata.isActive);
+
+ if (currentIndex === -1) return;
+
+ const totalQuestions = allQuestions.length;
+ let searchIndex = (currentIndex + 1) % totalQuestions;
+ let iterations = 0;
+
+ while (iterations < totalQuestions) {
+ if (!allQuestions[searchIndex]._metadata.isSaved) {
+ questionsAdapter.updateMany(state, [
+ {
+ id: allQuestions[currentIndex].question_id!,
+ changes: {
+ _metadata: {
+ ...allQuestions[currentIndex]._metadata,
+ isActive: false
+ }
+ }
+ },
+ {
+ id: allQuestions[searchIndex].question_id!,
+ changes: {
+ _metadata: {
+ ...allQuestions[searchIndex]._metadata,
+ isActive: true
+ }
+ }
+ }
+ ]);
+ return;
+ }
+
+ searchIndex = (searchIndex + 1) % totalQuestions;
+ iterations++;
+ }
+}
+
+function setProfilingQuestionsLogic(
+ state: WritableDraft<ProfilingQuestionsState>,
+ questions: ProfileQuestion[]) {
+
+ const hasActiveQuestion = Object.values(state.entities).some(
+ entity => entity?._metadata.isActive
+ );
+
+ const entities = questions.map((serverQuestion, index) => {
+ const existing = state.entities[serverQuestion.question_id!];
+ const shouldActivate = !hasActiveQuestion && index === 0;
+
+ return {
+ ...serverQuestion,
+ _metadata: existing?._metadata || {
+ ...getDefaultMetadata(),
+ isActive: shouldActivate,
+ },
+ _validation: existing?._validation || getDefaultValidation(),
+ };
+ });
+
+ questionsAdapter.setAll(state, entities);
+}
+
+
+function isGR(ext_question_id: string): boolean {
+ return ext_question_id.startsWith("gr:")
+}
+
+function isFirstNonGR(state: WritableDraft<ProfilingQuestionsState>): boolean {
+ // We want to identify if the next question is the first non-GR question
+ // because will want to trigger a full profile question refresh.
+
+ const allQuestions = questionsAdapter.getSelectors().selectAll(state);
+ const currentIndex = allQuestions.findIndex(q => q._metadata.isActive);
+
+ if (currentIndex === -1) false;
+
+ const totalQuestions = allQuestions.length;
+ let searchIndex = (currentIndex + 1) % totalQuestions;
+ let iterations = 0;
+
+ while (iterations < totalQuestions) {
+ if (!allQuestions[searchIndex]._metadata.isSaved) {
+
+ const current = isGR(allQuestions[currentIndex].ext_question_id!)
+ const next = isGR(allQuestions[searchIndex].ext_question_id!)
+
+ // We want to identify transitions from GR to non-GR questions,
+ // as we use GR questions to pre-calculate some non-GR questions,
+ // we should force a refresh.
+ return current && !next;
+ }
+
+ searchIndex = (searchIndex + 1) % totalQuestions;
+ iterations++;
+ }
+
+ return false;
+}
+
+const profilingQuestionSlice = createSlice({
+ name: 'profilingQuestions',
+ initialState: questionsAdapter.getInitialState(),
+ reducers: {
+
+ setProfilingQuestions: (state, action: PayloadAction<ProfileQuestion[]>) => {
+ setProfilingQuestionsLogic(state, action.payload);
+ },
+
+ metadataUpdated: (
+ state,
+ action: PayloadAction<{ question_id: string; metadata: Partial<UpkQuestionMetadata> }>
+ ) => {
+ const { question_id, metadata } = action.payload;
+ const entity = state.entities[question_id];
+ if (entity) {
+ entity._metadata = { ...entity._metadata, ...metadata };
+ }
+ },
+
+ validationUpdated: (
+ state,
+ action: PayloadAction<{ question_id: string; validation: Partial<ValidationResult> }>
+ ) => {
+ const { question_id, validation } = action.payload;
+ const entity = state.entities[question_id];
+ if (entity) {
+ entity._validation = { ...entity._validation, ...validation };
+ }
+ },
+
+ // Set one question as active, deactivate all others
+ setActiveQuestion: (state, action: PayloadAction<string>) => {
+ const questionId = action.payload;
+
+ // Deactivate all questions
+ Object.values(state.entities).forEach(entity => {
+ if (entity) {
+ entity._metadata.isActive = false;
+ }
+ });
+
+ // Activate the selected one
+ const entity = state.entities[questionId];
+ if (entity) {
+ entity._metadata.isActive = true;
+ }
+ },
+
+ // Clear active state from all questions
+ clearActiveQuestion: (state) => {
+ Object.values(state.entities).forEach(entity => {
+ if (entity) {
+ entity._metadata.isActive = false;
+ }
+ });
+ },
+
+ goToNextQuestion: (state) => {
+ goToNextQuestionLogic(state);
+ },
+
+ // -----------------------
+
+ addAnswers(state, action: PayloadAction<{ questionId: string, answers: string[] }>) {
+ /* When changing the answers in anyway, we want to:
+ 1. Add the new answers to the question metadata
+
+ This does not perform validation, it simply reassigns
+ the new answers to the question's _metadata.answers
+ field based on the question type and selector.
+
+ This "looses" the ability to track choice selection
+ sequence and timing which may be useful for MC questions
+ and security validation in the future.
+
+ Validation is handled separately in the isValid
+ function.
+
+ 2. Re-run validation to generate new ValidationError list
+ 3. Re-calculate the isComplete and isValid state
+ */
+
+ // let new_question = questionUtils.addAnswer(action.payload.question, action.payload.answers)
+ let entity = state.entities[action.payload.questionId];
+ const newMetadata = { ...entity._metadata, answers: action.payload.answers };
+
+ if (entity) {
+ entity._metadata = newMetadata;
+
+ entity = questionUtils.validate(entity)
+ entity = questionUtils.assignValidationState(entity)
+
+ state.entities[action.payload.questionId] = entity
+ }
+ },
+ },
+
+ extraReducers: (builder) => {
+ builder
+ .addCase(saveAnswer.pending, (state, action) => {
+ const questionId = action.meta.arg.questionId;
+ const bpuid = action.meta.arg.bpuid;
+ assert(bpuid, "Worker must be defined");
+
+ const question = state.entities[questionId];
+ if (question) {
+ assert(question._validation.isComplete, "Must submit Completed Questions");
+ assert(!question._metadata.isProcessing, "Can't submit processing Answer");
+ assert(!question._metadata.isSaved, "Can't submit completed Answer");
+ question._metadata.isProcessing = true;
+ }
+ })
+ .addCase(saveAnswer.fulfilled, (state, action) => {
+ const { questionId, response } = action.payload;
+ const question = state.entities[questionId];
+
+ if (question) {
+ question._metadata.isProcessing = false;
+ if (response.status === "success") {
+ question._metadata.isSaved = true;
+
+ // fetchNewQuestions is already being dispatched from
+ // the THUNK
+ goToNextQuestionLogic(state);
+
+ } else {
+ question._metadata.isSaved = false;
+ }
+ }
+ })
+ .addCase(saveAnswer.rejected, (state, action) => {
+ const questionId = action.meta.arg.questionId;
+ const question = state.entities[questionId];
+
+ if (question) {
+ question._metadata.isProcessing = false;
+ question._metadata.isSaved = false;
+ }
+ })
+ .addCase(fetchNewQuestions.fulfilled, (state, action) => {
+ console.log(".addCase(fetchNewQuestions.fulfilled, (state, action) => {")
+ setProfilingQuestionsLogic(state, action.payload as ProfileQuestion[]);
+ });
+ ;
+ }
+
+})
+
+export const {
+ setProfilingQuestions,
+ metadataUpdated,
+ setActiveQuestion,
+ goToNextQuestion,
+ addAnswers,
+} = profilingQuestionSlice.actions;
+
+// Selectors
+export const questionsSelectors = questionsAdapter.getSelectors(
+ (state: RootState) => state.profilingQuestions
+);
+
+// Custom selector to get the active question
+export const selectAllQuestions = (state: RootState): ProfileQuestion[] => {
+ return questionsSelectors.selectAll(state) ?? [];
+};
+
+// Custom selector to get the active question
+export const selectActiveQuestion = (state: RootState): ProfileQuestion | null => {
+ const allQuestions = questionsSelectors.selectAll(state);
+ return allQuestions.find(q => q._metadata.isActive) || null;
+};
+
+// Custom selector to get active question ID
+export const selectActiveQuestionId = (state: RootState): string | null => {
+ const activeQuestion = selectActiveQuestion(state);
+ return activeQuestion?.question_id || null;
+};
+
+export const selectActiveQuestionMetadata = (state: RootState): UpkQuestionMetadata | null => {
+ const activeQuestion = selectActiveQuestion(state);
+ return activeQuestion?._metadata || null;
+};
+
+export const selectActiveQuestionValidation = (state: RootState): ValidationResult | null => {
+ const activeQuestion = selectActiveQuestion(state);
+ return activeQuestion?._validation || null;
+};
+
+
+export default profilingQuestionSlice.reducer
+
diff --git a/jb-ui/src/models/profilingUtils.ts b/jb-ui/src/models/profilingUtils.ts
new file mode 100644
index 0000000..104a5bb
--- /dev/null
+++ b/jb-ui/src/models/profilingUtils.ts
@@ -0,0 +1,177 @@
+import { PatternValidation, UpkQuestionConfigurationMC, UpkQuestionConfigurationTE } from "@/api_fsb";
+import { assert } from "@/lib/utils";
+import { ProfileQuestion, ValidationError } from '@/models/profilingQuestionsSlice';
+import { Filter } from 'bad-words';
+
+const filter = new Filter();
+
+export const questionUtils = {
+
+ assignValidationState: (question: ProfileQuestion): ProfileQuestion => {
+ /* This function performs validation on the question's current answers and
+ assigns any error messages to question._metadata.error_msg.
+
+ If the question is MC, validate:
+ */
+
+ const errors = question._validation.errors ?? []
+
+ question._validation.isComplete = errors.length === 0
+ question._validation.isValid = errors.filter(e => e.severity === 'error').length === 0
+
+ return question;
+ },
+
+ validate: (question: ProfileQuestion): ProfileQuestion => {
+ /* If the question is MC, validate:
+
+ - validate selector SA vs MA (1 selected vs >1 selected)
+ - the answers match actual codes in the choices
+ - validate configuration.max_select
+ - validate choices.exclusive
+
+ If the question is TE, validate that:
+ - configuration.max_length
+ - validation.patterns
+ */
+
+ assert(question.question_id, "Question must have question_id")
+ // assert(question.configuration, "Question must have configuration")
+ const answers = question._metadata.answers ?? []
+
+ // Declare it here, and they we'll reassign any specific
+ // configuration types based on the question type.
+
+ // Start fresh without any error messages before validating
+ const errors: ValidationError[] = []
+
+ switch (question.question_type) {
+ case "TE":
+
+ answers.length === 0 && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "No answer provided",
+ severity: "warning",
+ } as ValidationError)
+
+ answers.length > 1 && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Only one answer allowed",
+ severity: "error",
+ } as ValidationError)
+
+ let answer_text: string = answers[0]
+
+ const te_config = question.configuration as UpkQuestionConfigurationTE
+ const min_length = te_config.min_length ?? 0
+ const max_length = te_config.max_length ?? 100_000
+
+ answer_text.length < min_length && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Answer shorter than allowed",
+ severity: "warning",
+ } as ValidationError)
+
+ answer_text.length > max_length && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Answer longer than allowed",
+ severity: "error",
+ } as ValidationError)
+
+ filter.isProfane(answer_text) && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Answer has inappropriate content",
+ severity: "error",
+ } as ValidationError)
+
+ const patterns: PatternValidation[] = (question.validation ?? {})["patterns"] ?? []
+ patterns.forEach((pv) => {
+ let re = new RegExp(pv.pattern)
+ answer_text.search(re) == -1 && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: pv.message,
+ severity: "error",
+ } as ValidationError)
+
+ })
+
+ break;
+
+ case "MC":
+
+ answers.length === 0 && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Multiple Choice question with no selected answers",
+ severity: "warning",
+ } as ValidationError)
+
+ const choice_codes: string[] = question.choices?.map((c) => c.choice_id) ?? [];
+
+ const mc_config = (question.configuration ?? {}) as UpkQuestionConfigurationMC
+ const max_select = mc_config.max_select ?? choice_codes.length
+
+ switch (question.selector) {
+ case "SA":
+ answers.length > 1 && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Single Answer MC question with >1 selected answers",
+ severity: "error",
+ } as ValidationError)
+
+ break;
+
+ case "MA":
+ answers.length > max_select && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "More options selected than allowed",
+ severity: "error",
+ } as ValidationError)
+
+ answers.length === max_select && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Selected all the options",
+ severity: "error",
+ } as ValidationError)
+
+ break;
+ }
+
+ // Now validate Multiple Choice answers regardless of if
+ // they're Single Answer (SA) or Multiple Answer (MA)
+ !answers.every(item => choice_codes.includes(item)) && errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Invalid options selected",
+ severity: "error",
+ })
+
+ // const max_select: number = question.configuration?.max_select ?? choice_codes.length
+ // if (answer.values.length > max_select) {
+ // answer.error_msg = "More options selected than allowed"
+ // }
+
+ /*
+ exclusive_choice = next((x for x in question["choices"] if x.get("exclusive")), None)
+ if exclusive_choice:
+ exclusive_choice_id = exclusive_choice["choice_id"]
+ assert answer == [exclusive_choice_id] or \
+ exclusive_choice_id not in answer, "Invalid exclusive selection"
+ */
+
+ break;
+
+ default:
+ errors.push({
+ path: `question_id:${question.question_id}`,
+ message: "Incorrect Question Type provided",
+ severity: "error",
+ } as ValidationError)
+ }
+
+ // Assign the errors back to the question's _validation field and
+ // then return the question
+ // TODO: does this edit in place, maybe I don't need to return it
+ question._validation.errors = errors
+ return question;
+ },
+
+}; \ No newline at end of file
diff --git a/jb-ui/src/pages/Home.tsx b/jb-ui/src/pages/Home.tsx
new file mode 100644
index 0000000..5a5c953
--- /dev/null
+++ b/jb-ui/src/pages/Home.tsx
@@ -0,0 +1,13 @@
+import max_lulu from "./max-and-lulu.jpg"
+
+const Home = function () {
+ return (
+ <img
+ src={max_lulu}
+ alt="Max and Lulu"
+ className="object-contain"
+ />
+ )
+};
+
+export default Home; \ No newline at end of file
diff --git a/jb-ui/src/pages/Preview.tsx b/jb-ui/src/pages/Preview.tsx
new file mode 100644
index 0000000..9506664
--- /dev/null
+++ b/jb-ui/src/pages/Preview.tsx
@@ -0,0 +1,288 @@
+import {
+ Leaderboard,
+ LeaderboardApi,
+ LeaderboardCode,
+ LeaderboardFrequency,
+ LeaderboardRow,
+} from "@/api_fsb";
+import { useAppSelector } from "@/hooks";
+import { bpid, formatCentsToUSD, truncate, } from "@/lib/utils";
+import { activeSurveys, activeUsers, maxPayout } from "@/models/grlStatsSlice";
+import { clsx } from "clsx";
+import moment from 'moment';
+import { useEffect, useState } from 'react';
+
+const showSmartRank = (
+ item: LeaderboardRow,
+ index: number,
+ items: LeaderboardRow[] | undefined
+): boolean => {
+ /**
+ * Smart rank calculation - this determines if we should show the rank
+ * value. It's confusing to show people that multiple individuals ranked
+ * in the same place, so this will only display the next ranked value, eg:
+ *
+ * - 1st
+ * - ___
+ * - 3rd
+ * - ___
+ * - ___
+ * - 6th
+ *
+ * @returns number
+ */
+ if (!items) return false;
+
+ const thisRank = item.rank;
+ if (index >= 1) {
+ const prevRank = items[index - 1].rank;
+ if (thisRank === prevRank) {
+ return false;
+ }
+ }
+ return true;
+};
+
+interface FrequencyButtonsProps {
+ selected: LeaderboardFrequency;
+ onChange: (frequency: LeaderboardFrequency) => void;
+}
+
+
+const ThreeButtonToggle = ({ selected, onChange }: FrequencyButtonsProps) => {
+ const buttons = [
+ { label: 'Day', value: LeaderboardFrequency.Daily },
+ { label: 'Week', value: LeaderboardFrequency.Weekly },
+ { label: 'Month', value: LeaderboardFrequency.Monthly },
+ ];
+
+ // rounded-l
+
+ return (
+ <div className="inline-flex rounded shadow-sm" role="group">
+ {buttons.map((button, idx) => (
+ <button
+ type="button"
+ key={button.value}
+ onClick={() => onChange(button.value)}
+ className={clsx(
+ "px-2 py-1 text-[10px] font-medium",
+ "border-t border-b border-gray-200",
+ "hover:cursor-pointer hover:bg-zinc-200 hover:text-zinc-950",
+ idx === 0 && "rounded-l",
+ idx === buttons.length - 1 && "rounded-r",
+ selected === button.value
+ ? 'text-zinc-50 bg-zinc-400'
+ : 'text-zinc-950 bg-zinc-50',
+ )}>
+ {button.label}
+ </button>
+ ))}
+ </div>
+ );
+};
+
+
+
+// Leaderboards Component
+export const Leaderboards = () => {
+ /**
+ * Leaderboards do not do any caching, or better state management. This is okay because
+ * the API is handled to take it. However, it can easily handled better client
+ * side rather than making the
+ * **/
+
+ const [frequency, setFrequency] = useState<LeaderboardFrequency>(
+ LeaderboardFrequency.Daily
+ );
+
+ const [payouts, setPayouts] = useState<Leaderboard | null>(null);
+ const [completes, setCompletes] = useState<Leaderboard | null>(null);
+
+ // const bpuid = useAppSelector(state => state.app.bpuid)
+ const bpuid = undefined
+
+ useEffect(() => {
+ new LeaderboardApi().timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(
+ bpid,
+ LeaderboardCode.CompleteCount,
+ frequency,
+ "us",
+ bpuid, // bpuid
+ undefined, // within_time
+ 10)
+ .then(res => {
+ setCompletes(res.data.leaderboard as Leaderboard)
+ })
+
+ new LeaderboardApi().timespanLeaderboardProductIdLeaderboardTimespanBoardCodeGet(
+ bpid,
+ LeaderboardCode.SumUserPayout,
+ frequency,
+ "us",
+ bpuid,
+ undefined,
+ 10)
+ .then(res => {
+ setPayouts(res.data.leaderboard as Leaderboard)
+ })
+ }, [frequency]);
+
+ let dateRange = " - "
+ if (completes) {
+ const start = moment(completes?.start_timestamp * 1000).format("MMM Do, ha");
+ const end = moment(completes?.end_timestamp * 1000).format("MMM Do, h:mm:ssa");
+ //dateRange = `${start} – ${end} (${completes?.timezone_name})`;
+ dateRange = `${start} – ${end}`;
+ }
+
+ return (
+ <div className="my-2 mx-4 py-0">
+ <div className="w-full flex items-center justify-between my-1">
+ {/* Left spacer (hidden on small screens) */}
+ <div className="hidden md:block md:w-1/3"></div>
+
+ {/* Centered text */}
+ <h3 className="text-center flex-1 md:1/3">
+ Leaderboards
+ </h3>
+
+ {/* Right-aligned button group */}
+ <div className="flex md:w-1/3 justify-end">
+ <ThreeButtonToggle
+ selected={frequency}
+ onChange={setFrequency}
+ />
+ </div>
+ </div>
+
+ <div className="grid grid-cols-1 mb-2 text-zinc-700">
+ <p className="text-center text-[10px] font-thin">
+ {dateRange}
+ </p>
+ </div>
+
+ <div className="grid grid-cols-1 gap-4 px-12 md:px-0
+ md:grid-cols-2">
+ <table className="border-collapse text-emerald-950 text-[8px] md:text-sm">
+ <caption className="caption-top text-xs font-semibold">
+ Most earned in the past week.
+ </caption>
+ <thead>
+ <tr className="
+ font-mono font-semibold text-center
+ border border-zinc-150">
+ <th>Rank</th>
+ <th>Bonus</th>
+ <th>User</th>
+ </tr>
+ </thead>
+ <tbody className="font-mono">
+
+ {payouts?.rows?.map((dataItem: LeaderboardRow) => (
+ <tr key={dataItem.bpuid} className="
+ text-center
+ border border-zinc-100">
+ <td className="font-medium">
+ {dataItem.rank}
+ </td>
+ <td className="font-semibold">
+ {formatCentsToUSD(dataItem.value)}
+ </td>
+ <td className="font-light">
+ {truncate(dataItem.bpuid, 6, "*****").toUpperCase()}
+ </td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+
+ <table className="border-collapse border border-gray-400
+ text-emerald-950 text-[8px] md:text-sm">
+ <caption className="caption-top text-xs font-semibold">
+ Top completes in the past week.
+ </caption>
+ <thead>
+ <tr className="
+ font-mono font-semibold text-center
+ border border-zinc-150 rounded">
+ <th>Rank</th>
+ <th>Completes</th>
+ <th>User</th>
+ </tr>
+ </thead>
+ <tbody className="font-mono">
+
+ {completes?.rows?.map((dataItem: LeaderboardRow, index: number) => (
+ <tr key={dataItem.bpuid} className="
+ text-center
+ border border-zinc-100">
+ <td className="font-medium">
+ {dataItem.rank ?? showSmartRank(dataItem, index, completes?.rows)}
+ </td>
+ <td className="font-semibold">
+ {dataItem.value}
+ </td>
+ <td className="font-light">
+ {truncate(dataItem.bpuid, 6, "*****").toUpperCase()}
+ </td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ </div>
+ </div>
+ );
+};
+
+
+
+// Preview Component
+const Preview = () => {
+ /**
+ *
+ * @returns {JSX.Element}
+ */
+
+ const users = useAppSelector(state => activeUsers(state))
+ const users_f: string = users?.toLocaleString() ?? " – "
+
+ const surveys = useAppSelector(state => activeSurveys(state))
+ const surveys_f: string = surveys?.toLocaleString() ?? " – "
+
+ const survey_max_cpi = useAppSelector(state => maxPayout(state))
+ const formatter = new Intl.NumberFormat('en-US', {
+ style: 'currency',
+ currency: 'USD',
+ });
+ const survey_max_cpi_f: string = formatter.format((survey_max_cpi ?? 0) / 100)
+
+ return (
+ <div className="max-h-[calc(100vh-10rem)] overflow-y-auto">
+
+ <div className="bg-zinc-100 rounded py-2 m-0">
+ <p className="text-center text-sm italic text-zinc-600">
+ {users_f} people are actively attempting {surveys_f} available surveys right now.
+ </p>
+ </div>
+
+ <Leaderboards />
+
+ <div className="bg-zinc-100 rounded py-2 px-6 m-0 text-xs text-center">
+ <p className="py-1">
+ Get paid to take surveys. Our algorithm attempts to pair you with the
+ highest paying survey available at the moment (right now, the highest
+ paying survey is {survey_max_cpi_f}) that you are eligible for,
+ each attempt is a valid HIT. Try as many as you can, our system will
+ self regulate you: we want to ensure you have a high chance of being
+ paired with a survey based on what surveys are available, as their
+ availability constantly changes.</p>
+ <p className="py-1">
+ Each HIT is paid when you attempt to take a survey and if you complete
+ the survey, you will be awarded a bonus equal to that in which the
+ survey pays out.</p>
+ </div>
+ </div>
+ );
+};
+export default Preview; \ No newline at end of file
diff --git a/jb-ui/src/pages/Result.tsx b/jb-ui/src/pages/Result.tsx
new file mode 100644
index 0000000..47af248
--- /dev/null
+++ b/jb-ui/src/pages/Result.tsx
@@ -0,0 +1,123 @@
+import { useAppSelector } from "@/hooks";
+import confetti from "canvas-confetti";
+import { useEffect } from "react";
+
+// getOutcomeStr: function () {
+// return {
+// 0: "UNKNOWN", 1: "ENTER",
+// 2: "INCOMPLETE", 3: "COMPLETE"
+// }[this.get('status')] || '';
+// }
+
+export const Complete = () => {
+ const ts = useAppSelector(state => state.app.taskStatus)
+
+ return (
+ <>
+ <h2 className="text-lg">Survey Completed</h2>
+ <p className="text-emerald-700 text-lg font-bold">Congratulations! You completed the Survey.</p>
+ <p className="text-emerald-700 text-2xl font-bold">{ts?.user_payout_string}</p>
+ <p className="text-slate-300">You may close this tab and return to submit the HIT</p>
+ </>
+ )
+}
+
+export const Enter = () => {
+ return (
+ <>
+ <h2 className="text-lg">Entered</h2>
+ <p className="text-slate-800 text-lg font-bold">You're currently in the Survey</p>
+ <p className="text-slate-300">You may close this tab and return to submit the HIT</p>
+ </>
+ )
+}
+
+export const InComplete = () => {
+ const ts = useAppSelector(state => state.app.taskStatus)
+ if (!ts) { return null; }
+
+ return (
+ <>
+ <h2 className="text-lg">HIT Complete</h2>
+ <p className="text-rose-800 text-lg font-bold">Survey terminated the attempt.</p>
+ <p className="text-slate-300">You may close this tab and return to submit the HIT</p>
+ </>
+
+ )
+}
+
+export const Unknown = () => {
+
+ return (
+ <>
+ <h2 className="text-lg">Task Issue</h2>
+ <p className="text-rose-800 text-lg font-bold">You're not currently eligible for any Surveys</p>
+ <p className="text-slate-300">You may close this tab and return to submit the HIT</p>
+ </>
+ )
+}
+
+export const Loading = () => {
+
+ return (
+ <p className="text-2xl font-semibold">Loading...</p>
+ )
+}
+
+
+const Result = () => {
+
+ const ts = useAppSelector(state => state.app.taskStatus)
+
+ const confettiCannons = () => {
+ const end = Date.now() + 3 * 1000
+ const colors = ["#84cc16", "#1e3a8a", "#ec4899"]
+ const frame = () => {
+ if (Date.now() > end) return
+ confetti({
+ particleCount: 3,
+ angle: 60,
+ spread: 55,
+ startVelocity: 80,
+ gravity: 0.7,
+ origin: { x: 0, y: 0.8 },
+ colors: colors,
+ })
+ confetti({
+ particleCount: 3,
+ angle: 120,
+ spread: 55,
+ startVelocity: 80,
+ gravity: 0.7,
+ origin: { x: 1, y: 0.8 },
+ colors: colors,
+ })
+ requestAnimationFrame(frame)
+ }
+ frame()
+ }
+
+ useEffect(() => {
+ if (ts?.status === 3) {
+ confettiCannons()
+ }
+ }, [ts])
+
+
+ switch (ts?.status) {
+ case 0: // UNKNOWN
+ return <Unknown />;
+ case 1: // ENTER
+ return <Enter />;
+ case 2: // INCOMPLETE
+ return <InComplete />;
+ case 3: // COMPLETE
+ return <Complete />;
+ default:
+ return <Loading />;
+ }
+
+};
+
+
+export default Result; \ No newline at end of file
diff --git a/jb-ui/src/pages/Work.tsx b/jb-ui/src/pages/Work.tsx
new file mode 100644
index 0000000..c54732f
--- /dev/null
+++ b/jb-ui/src/pages/Work.tsx
@@ -0,0 +1,765 @@
+import {
+ BucketTask,
+ OfferwallApi,
+ OfferwallReason,
+ ReportApi, ReportTask, ReportValue, StatusApi,
+ TasksStatusResponse, TaskStatusResponse, TopNPlusBlockOfferWall
+} from "@/api_fsb";
+
+import { Button } from "@/components/ui/button";
+import { Checkbox } from "@/components/ui/checkbox";
+import {
+ Field,
+ FieldDescription,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSet,
+} from "@/components/ui/field";
+import { useAppDispatch, useAppSelector } from "@/hooks";
+import { bpid, formatCentsToUSD, formatSource, truncate } from "@/lib/utils";
+import {
+ getAvailabilityCount, getLOIText,
+ isLowBalance,
+ selectBucket,
+ setAttemptedLiveEligibleCount,
+ setAvailabilityCount,
+ setCurrentBuckets,
+ setEnteredTimestamp, setLOI,
+ setOfferwallReasons,
+ setTaskStatus
+} from "@/models/appSlice";
+import {
+ createColumnHelper, flexRender, getCoreRowModel,
+ useReactTable
+} from "@tanstack/react-table";
+import { XIcon } from "lucide-react";
+import moment from "moment/moment";
+import { useEffect, useRef, useState } from "react";
+import Markdown from 'react-markdown';
+
+const Report = ({ onClose }: { onClose: () => void }) => {
+ const [showComplete, setShowComplete] = useState(false);
+ const [selectedValues, setSelectedValues] = useState<ReportValue[]>([]);
+
+ const bpuid = useAppSelector(state => state.app.bpuid)
+ const ts = useAppSelector(state => state.app.taskStatus)
+
+ const handleCheckboxChange = (value: ReportValue, checked: boolean) => {
+ setSelectedValues(prev =>
+ checked
+ ? [...prev, value]
+ : prev.filter(v => v !== value)
+ );
+ };
+
+ const clicked_submit = () => {
+ if (!bpuid) return;
+ // ReportValue.NUMBER_0
+ console.log("selectedValues:", selectedValues);
+
+ const rt: ReportTask = {
+ 'bpuid': bpuid,
+ 'reasons': selectedValues,
+ 'notes': ""
+ };
+
+ new ReportApi().reportTaskProductIdReportPost(
+ bpid, // productId
+ rt, // reportTask
+ ).then(res => {
+ console.log("Response:", res); // Check what's actually here
+
+ if (res.status === 400) {
+ // Handle error here instead
+ } else {
+ setShowComplete(true);
+ }
+ })
+ }
+
+ const reportReasons = [
+ { id: 'TECHNICAL_ERROR', label: 'Technical Error', value: ReportValue.NUMBER_1 },
+ { id: 'NO_REDIRECT', label: 'No Redirect', value: ReportValue.NUMBER_2 },
+ { id: 'PRIVACY_INVASION', label: 'Privacy Invasion', value: ReportValue.NUMBER_3 },
+ { id: 'UNCOMFORTABLE_TOPICS', label: 'Uncomfortable Topics', value: ReportValue.NUMBER_4 },
+ { id: 'ASKED_FOR_NOT_ALLOWED_ACTION', label: 'Asked for Not Allowed Action', value: ReportValue.NUMBER_5 },
+ { id: 'BAD_ON_MOBILE', label: 'Bad on Mobile', value: ReportValue.NUMBER_6 },
+ { id: 'DIDNT_LIKE', label: "Didn't Like", value: ReportValue.NUMBER_7 },
+ ];
+
+ if (!ts?.finished) {
+ return <p>Please finish a Task to report its status.</p>
+ }
+
+ if (showComplete) {
+ return <SubimtAMT />
+ }
+
+ return (
+ <div className="border-2 border-rose-200 rounded">
+ <div className="flex justify-center">
+ <FieldSet className="mt-2">
+ <FieldLegend variant="label" className="my-0 text-rose-950">
+ Please select all reasons why you are reporting this Task:
+ </FieldLegend>
+ <FieldDescription className="my-0 text-rose-950">
+ You must provide at least one reason to report a Task.
+ </FieldDescription>
+ <FieldGroup className="gap-2 my-0 py-0">
+
+ {reportReasons.map((reason) => (
+ <Field key={reason.id} orientation="horizontal" className="
+ hover:cursor-pointer">
+ <Checkbox
+ id={reason.id}
+ name={reason.id}
+ onCheckedChange={(checked) =>
+ handleCheckboxChange(reason.value, checked as boolean)
+ }
+ />
+ <FieldLabel
+ htmlFor={reason.id}
+ className="font-medium text-rose-950
+ hover:cursor-pointer hover:font-semibold"
+ >
+ {reason.label}
+ </FieldLabel>
+ </Field>
+ ))}
+
+ </FieldGroup>
+ </FieldSet>
+ </div>
+ <div className="flex justify-center my-2 space-x-5">
+ <Button variant="outline" size="icon" aria-label="Submit"
+ className="
+ border-2 rounded border-zinc-800 text-zinc-800
+ hover:cursor-pointer hover:bg-zinc-800 hover:text-zinc-50"
+ onClick={onClose}>
+ <XIcon />
+ </Button>
+ <Button variant="outline"
+ className="
+ border-2 rounded border-rose-400 text-rose-950
+ hover:cursor-pointer hover:bg-rose-400 hover:text-rose-50"
+ onClick={clicked_submit}>Submit and Complete HIT</Button>
+ </div>
+ </div>
+ )
+}
+
+const SubimtAMT = () => {
+ const bpuid = useAppSelector(state => state.app.bpuid)
+ const assignment_id = useAppSelector(state => state.app.assignment_id)
+ const ts = useAppSelector(state => state.app.taskStatus)
+ const turkSubmitTo = useAppSelector(state => state.app.turkSubmitTo)
+
+ const formRef = useRef<HTMLFormElement>(null);
+
+ useEffect(() => {
+ if (!ts) return;
+ if (!bpuid) return;
+ if (!assignment_id) return;
+ if (!turkSubmitTo) return;
+
+ if (formRef.current) {
+ formRef.current.submit();
+ }
+ }, [ts?.tsid, bpuid, assignment_id, turkSubmitTo]);
+
+ return (
+ <>
+ <form
+ ref={formRef}
+ action={`${turkSubmitTo}/mturk/externalSubmit`}
+ method="POST"
+ style={{ display: 'none' }}>
+ <input type="hidden" name="assignmentId" value={assignment_id} />
+ <input type="hidden" name="tsid" value={ts?.tsid} />
+ <input type="hidden" name="amt_assignment_id" value={assignment_id} />
+ <input type="hidden" name="amt_worker_id" value={bpuid} />
+ <button type="submit">Submit HIT</button>
+ </form>
+ </>
+ )
+}
+
+
+const SurveyMonitor = () => {
+ const dispatch = useAppDispatch()
+
+ const [isPolling, setIsPolling] = useState(true);
+ // const [timeAgo, setTimeAgo] = useState("");
+
+ const [showComplete, setShowComplete] = useState(false);
+ const [showReport, setShowReport] = useState(false);
+
+ const bpuid = useAppSelector(state => state.app.bpuid)
+ const entered = useAppSelector(state => state.app.currentBucketEntered)
+ const isLow = useAppSelector(state => isLowBalance(state))
+
+ const ts = useAppSelector(state => state.app.taskStatus)
+ const isBaddie = ts?.status_code_1 === "SESSION_START_FAIL" || ts?.status_code_1 === "SESSION_START_QUALITY_FAIL" || ts?.status_code_1 === "SESSION_CONTINUE_QUALITY_FAIL";
+
+ // useEffect(() => {
+ // if (!ts) return;
+
+ // const updateTimeAgo = () => {
+ // const time_ago = moment(ts.started).fromNow();
+ // setTimeAgo(time_ago);
+ // };
+
+ // // Update immediately
+ // updateTimeAgo();
+
+ // // Then update every minute
+ // const intervalId = setInterval(updateTimeAgo, 60 * 1000);
+
+ // return () => clearInterval(intervalId);
+ // }, [ts]);
+
+ useEffect(() => {
+ if (!bpuid) return;
+ if (!entered) return;
+ if (!isPolling) return;
+
+ const pollApi = async () => {
+ new StatusApi().listTaskStatusesProductIdStatusGet(
+ bpid, // productId
+ bpuid, // Worker ID
+ entered, // startedAfter
+ moment.utc().unix() // startedBefore
+ ).then(res => {
+ const d = res.data as TasksStatusResponse;
+
+ if (!d.tasks_status || d.tasks_status.length === 0) {
+ // Likely still in a GRS survey
+ return;
+ }
+
+ // if (d_len >= 2) Sentry.captureMessage("Results returned back multiple")
+ const ts = d.tasks_status![0] as TaskStatusResponse;
+ dispatch(setTaskStatus(ts))
+
+ if (ts.status == 2 || ts.status == 3) {
+ // INCOMPLETE + COMPLETE
+ setIsPolling(false);
+ }
+ });
+
+ // If there is already a TaskStatus, update the time ago
+ // if (ts) {
+ // const time_ago = moment(ts.started).fromNow();
+ // setTimeAgo(time_ago);
+ // }
+ };
+
+ // Call immediately on mount, then set up interval
+ pollApi();
+ const intervalId = setInterval(pollApi, 4 * 1000);
+
+ // Cleanup: stop interval when component unmounts or isPolling changes
+ return () => clearInterval(intervalId);
+ }, [isPolling, entered]);
+
+ if (!ts) {
+ return (
+ <p>Loading</p>
+ )
+ }
+
+ // This is if they are actively in a survey or we can't determine the
+ // status yet. We want to show the timer and keep them on this page to
+ // monitor for completion. This gets shown no matter what regardless of
+ // balance.
+ //
+ // 0 - UNKNOWN, 1 - ENTER
+ if (ts.status === 0 || ts.status === 1) {
+ return (
+ <>
+ <div>
+ <h2 className="
+ bg-blue-500 rounded py-2
+ text-white text-2xl font-semibold text-center">
+ In Progress
+ </h2>
+ <p className="
+ py-4
+ text-zinc-500 text-2xl font-semibold text-center">
+ We're actively monitoring your Task status.
+ </p>
+ </div>
+ </>
+ )
+ }
+
+ // This is if they have finished a survey complete and it resulted in a
+ // COMPLETE or a INCOMPLETE (doesn't matter). They can now submit the HIT.
+ //
+ // 2 - INCOMPLETE, 3 - COMPLETE
+ return (
+ <>
+ <div>
+ <h2 className="
+ bg-blue-500 rounded py-2
+ text-white text-2xl font-semibold text-center">
+ {ts.status === 3 ? "Survey Complete!" : "Survey Terminated."}
+ </h2>
+
+ {((ts.status === 3 || !isLow) && !isBaddie) && (
+ <p className="
+ py-2
+ text-zinc-500 text-md font-medium text-center">
+ You may now submit the HIT.
+ </p>
+ )}
+ </div>
+
+ {(isBaddie) ? (
+ <>
+ <div className="
+ border-2 border-rose-500 rounded py-2
+ bg-rose-400 text-rose-700">
+ <h2 className="text-center text-xl font-bold text-white">
+ Quality Check Failed.
+ </h2>
+ <p className="px-4 py-2 text-center text-sm font-medium text-white">
+ Unfortunately, it looks like you did not pass the quality check for this survey.
+ </p>
+
+ <p className="
+ pt-0 pb-4
+ text-red-950 text-sm font-semibold text-center">
+ Please return the HIT to avoid having your assignment rejected.
+ </p>
+ </div>
+ </>
+
+ ) : (
+ <>
+ {(ts.status === 3 || !isLow) ? (
+ <>
+ <div className="flex justify-center my-4 space-x-5">
+
+ <button type="button" className="
+ border-4 rounded border-emerald-400 py-1 px-3
+ text-xl font-bold text-emerald-950
+ hover:cursor-pointer hover:bg-emerald-400 hover:text-emerald-50"
+ onClick={() => setShowComplete(true)}
+ >Submit HIT</button>
+
+ <button type="button" className="
+ border-4 rounded border-rose-200 py-1 px-3
+ text-xl font-bold text-rose-200
+ hover:cursor-pointer hover:border-rose-500 hover:bg-rose-400 hover:text-rose-50"
+ onClick={() => setShowReport(!showReport)}
+ >Report Survey</button>
+ </div>
+
+ {showComplete && <SubimtAMT />}
+ {showReport && <Report onClose={() => setShowReport(false)} />}
+ </>
+ ) : (
+ <div>
+ <p className="
+ text-red-600 text-lg font-semibold text-center">
+ Your balance is low. You cannot submit the HIT at this time.
+ </p>
+
+ <p className="
+ pt-0 pb-4
+ text-red-950 text-sm font-semibold text-center">
+ Please return the HIT to avoid having your assignment rejected.
+ </p>
+ </div>
+ )}
+ </>
+
+ )}
+
+
+ </>
+ )
+}
+
+
+const LOISelect = () => {
+ // This is what's responsible for being able to click on the text
+ // we set the global LOI times.
+
+ const dispatch = useAppDispatch()
+ const loi: number = useAppSelector(state => state.app.loi)
+ const bucket = useAppSelector(state => selectBucket(state))
+
+ const toggle_loi = function () {
+ dispatch(setLOI(loi >= 1800 ? 600 : loi + 600))
+ }
+
+ const time_f = useAppSelector(state => getLOIText(state))
+
+ const avg_time_f = ((bucket?.duration.q2 ?? 0) / 60).toLocaleString(
+ 'en-US', { minimumFractionDigits: 0, maximumFractionDigits: 1 })
+
+ const formatter = new Intl.NumberFormat('en-US', {
+ style: 'currency',
+ currency: 'USD',
+ });
+ const avg_pay_f: string = formatter.format((bucket?.payout.q2 ?? 0) / 100)
+
+ return (
+ <div className="bg-zinc-100 rounded py-2 m-0">
+ <p className="text-zinc-700 text-2xl text-center font-bold m-0">
+ I have <span
+ className="cursor-pointer text-emerald-600 italic hover:text-emerald-700 hover:underline"
+ onClick={toggle_loi}>{time_f}</span> minutes
+ </p>
+ <p
+ className="text-center text-xs font-thin m-0 text-zinc-500">
+ The average time spent is {avg_time_f} minutes and pays {avg_pay_f}</p>
+ </div>
+ )
+
+};
+
+const SurveyLoading = () => {
+ return (
+ <div className="
+ border-8 border-emerald-400 rounded py-0 my-2
+ text-center text-3xl
+ hover:cursor-pointer hover:bg-green-500 hover:text-white">
+ <p className="py-2 text-center text-3xl font-semibold">
+ Survey Loading…
+ </p>
+ </div>
+ )
+}
+
+
+const NoSurveys = () => {
+ const offerwall_reasons = useAppSelector(state => state.app.offerwall_reasons)
+
+ const REASON_DISPLAY: Record<OfferwallReason, { label: string; description: string }> = {
+ [OfferwallReason.UserBlocked]: {
+ label: "Account Restricted",
+ description: "Your account has been restricted.",
+ },
+ [OfferwallReason.HighReconRate]: {
+ label: "High Reconciliation Rate",
+ description: "Your account has an unusually high reconciliation rate.",
+ },
+ [OfferwallReason.UncommonDemographics]: {
+ label: "Demographic Mismatch",
+ description: "No surveys require your current demographics.",
+ },
+ [OfferwallReason.UnderMinimumAge]: {
+ label: "Age Requirement Not Met",
+ description: "You must meet the minimum age requirement to participate.",
+ },
+ [OfferwallReason.ExhaustedHighValueSupply]: {
+ label: "No Premium Offers Available",
+ description: "You've attempted all premium surveys.",
+ },
+ [OfferwallReason.AllEligibleAttempted]: {
+ label: "All Offers Attempted",
+ description: "You've attempted all available surveys.",
+ },
+ [OfferwallReason.LowCurrentSupply]: {
+ label: "Limited Availability",
+ description: "There are currently limited opportunities available.",
+ },
+ };
+
+ function formatReasons(reasons: OfferwallReason[]): { label: string; description: string }[] {
+ return reasons.map((r) => REASON_DISPLAY[r]);
+ }
+
+ return (
+ <>
+ <div className="
+ border-8 border-emerald-400 rounded py-0 my-2
+ text-center text-3xl
+ hover:cursor-pointer hover:bg-green-500 hover:text-white">
+ <p className="py-2 text-center text-3xl font-semibold">
+ No Surveys available…
+ </p>
+ </div>
+
+ {formatReasons(offerwall_reasons).map(r => {
+ return (
+ <div className="
+ border-6 border-rose-200 rounded py-0 my-2
+ text-center
+ hover:cursor-pointer hover:bg-rose-200 hover:text-rose-950 ">
+ <p className="py-2 text-center text-md font-semibold text-rose-600">
+ {r.description}
+ </p>
+ </div>
+ )
+ })}
+ </>
+ )
+}
+
+const BucketDetails = () => {
+ const bucket = useAppSelector(state => selectBucket(state))
+ if (!bucket) return null;
+ const [showDetails, setShowDetails] = useState(false);
+
+ const columnHelper = createColumnHelper<BucketTask>()
+ const columns = [
+ columnHelper.display({
+ id: 'index',
+ header: '#',
+ cell: ({ row }) => row.index + 1,
+ size: 25,
+ meta: {
+ align: 'center'
+ }
+ }),
+ columnHelper.accessor('source', {
+ header: () => 'Marketplace',
+ cell: (props) => {
+ const s = props.getValue()
+ return formatSource(s)
+ },
+ size: 85,
+ meta: {
+ align: 'left'
+ }
+ }),
+ columnHelper.accessor('id', {
+ header: () => 'Survey ID',
+ cell: props => {
+ return truncate(props.getValue(), 6, "*****").toUpperCase()
+ },
+ size: 70,
+ meta: {
+ align: 'left'
+ }
+ }),
+ columnHelper.accessor('payout', {
+ header: () => 'Amount',
+ cell: (props) => {
+ const val = props.renderValue() as number;
+ return formatCentsToUSD(val)
+ },
+ size: 50,
+ meta: {
+ align: 'center'
+ }
+ }),
+ columnHelper.accessor('loi', {
+ header: () => 'Duration',
+ cell: (props) => {
+ const val = props.renderValue() as number;
+ return `${Math.round(val / 60)} min`
+ },
+ size: 50,
+ meta: {
+ align: 'center'
+ }
+ }),
+ ]
+
+ const table = useReactTable({
+ 'data': bucket.contents,
+ 'columns': columns,
+ getCoreRowModel: getCoreRowModel(),
+ });
+
+ return (
+ <>
+ <div className="w-full text-center text-[8px] text-emerald-600
+ rounded py-2 my-1
+ hover:cursor-pointer hover:text-emerald-700 hover:underline hover:bg-emerald-200
+ "
+ onClick={() => setShowDetails(!showDetails)}
+ >
+ ({showDetails ? 'Hide' : 'Show'} details of surveys in this bucket)
+ </div>
+
+ {showDetails && (
+ <div className="w-full border-t-1 border-emerald-200 py-1 my-0 flex justify-center">
+ <table className="text-[10px] text-emerald-900 table-fixed border-collapse">
+ <thead className="font-bold">
+ {table.getHeaderGroups().map((headerGroup) => (
+
+ <tr key={headerGroup.id}>
+ {headerGroup.headers.map((header) => {
+ const align = header.column.columnDef.meta?.align || 'left';
+ const alignClass = align === 'center' ? 'text-center' : align === 'right' ? 'text-right' : 'text-left';
+
+ return (
+ <th
+ key={header.id}
+ className={`p-0 m-0 ${alignClass}`}
+ style={{
+ width: `${header.column.getSize()}px`,
+ }}
+ >
+ {flexRender(
+ header.column.columnDef.header,
+ header.getContext(),
+ )}
+ </th>
+ )
+ })}
+ </tr>
+ ))}
+ </thead>
+ <tbody>
+ {table.getRowModel().rows.map((row) => (
+ <tr key={row.id}>
+ {row.getVisibleCells().map((cell) => {
+ const align = cell.column.columnDef.meta?.align || 'left';
+ const alignClass = align === 'center' ? 'text-center' :
+ align === 'right' ? 'text-right' : 'text-left';
+
+ return (
+ <td key={cell.id}
+ className={`p-0 ${alignClass}`}
+ style={{
+ width: `${cell.column.getSize()}px`,
+ }}
+ >
+ {flexRender(cell.column.columnDef.cell, cell.getContext())}
+ </td>
+ )
+ })}
+ </tr>
+ ))}
+ </tbody>
+
+ </table>
+ </div>
+ )}
+ </>
+ )
+};
+
+const SurveyEnter = () => {
+ const dispatch = useAppDispatch()
+ const loi = useAppSelector(state => state.app.loi)
+ const bpuid = useAppSelector(state => state.app.bpuid)
+
+ const available_cnt = useAppSelector(state => getAvailabilityCount(state))
+ const buckets = useAppSelector(state => state.app.currentBuckets)
+ const bucket = useAppSelector(state => selectBucket(state))
+ const isLow = useAppSelector(state => isLowBalance(state))
+
+ useEffect(() => {
+ if (!bpuid) return;
+
+ new OfferwallApi().topNPlusBlockOfferwallProductIdOfferwallD48cce47Get(
+ bpid, // productId
+ bpuid, // bpuid
+ undefined, // ip
+ undefined, // countryIso
+ undefined, // languages
+ undefined, // behavior
+ undefined, // minPayout
+ loi, //duration
+ 1 // nBins
+ ).then(res => {
+ const top_n_res = res.data.offerwall as TopNPlusBlockOfferWall;
+ dispatch(setAvailabilityCount(top_n_res.availability_count))
+ if (top_n_res.attempted_live_eligible_count) {
+ dispatch(setAttemptedLiveEligibleCount(top_n_res.attempted_live_eligible_count))
+ }
+ dispatch(setCurrentBuckets(top_n_res.buckets))
+ dispatch(setOfferwallReasons(top_n_res.offerwall_reasons ?? []))
+ });
+ }, [loi, bpuid]);
+
+
+ const start_survey = () => {
+ if (!bucket?.uri) return;
+
+ dispatch(setEnteredTimestamp());
+ window.open(bucket.uri, '_blank');
+ }
+
+ if (buckets === undefined) {
+ return <SurveyLoading />
+ }
+
+ if (available_cnt === 0 || buckets.length === 0 || !bucket) {
+ return <NoSurveys />
+ }
+
+ return (
+ <>
+ {isLow && (
+ <div className="
+ border-8 border-rose-500 rounded py-2
+ bg-rose-400 text-rose-700">
+ <h2 className="text-center text-xl font-bold text-white">
+ Your balance is low.
+ </h2>
+ <p className="px-4 py-2 text-center text-sm font-medium text-white">
+ You may continue to attempt surveys, but you will be
+ advised to return the HIT if your survey attempt does
+ not result in a complete.
+ </p>
+ <p className="px-4 py-2 text-center text-sm font-bold text-white">
+ HIT submissions with a balance exceeding -$1.00 will
+ return in rejected assignments.
+ </p>
+ </div>
+ )}
+
+ <LOISelect />
+ <div
+ onClick={start_survey}
+ className="
+ border-8 border-emerald-400 rounded py-0 my-2
+ hover:cursor-pointer hover:bg-emerald-400 hover:text-emerald-50">
+ <p className="py-2 text-center text-3xl font-semibold">
+ <a
+ target="_blank"
+ rel="noopener noreferrer">
+ Start Task
+ </a>
+ </p>
+ </div>
+ <BucketDetails />
+
+ <div className="border-2 border-emerald-200 rounded py-2 m-0">
+ <p className="text-emerald-700 text-sm text-center font-medium px-2 m-0">
+ <Markdown>
+ {bucket.eligibility_explanation}
+ </Markdown>
+ </p>
+ </div>
+ </>
+ )
+};
+
+
+const Work = () => {
+ const entered = useAppSelector(state => state.app.currentBucketEntered)
+ const assignment_id = useAppSelector(state => state.app.assignment_id)
+
+ if (!assignment_id) {
+ return (
+ <p className="text-center text-2xl py-3 text-red-800 font-semibold">
+ No Assignment ID found. Please access this page through
+ the Amazon Mechanical Turk platform.
+ </p>
+ )
+ }
+
+ return (
+ <>
+ {entered ? (
+ <SurveyMonitor />
+ ) : (
+ <SurveyEnter />
+ )}
+ </>
+ )
+};
+
+
+export default Work; \ No newline at end of file
diff --git a/jb-ui/src/pages/max-and-lulu.jpg b/jb-ui/src/pages/max-and-lulu.jpg
new file mode 100644
index 0000000..e7e0b7d
--- /dev/null
+++ b/jb-ui/src/pages/max-and-lulu.jpg
Binary files differ
diff --git a/jb-ui/src/store.ts b/jb-ui/src/store.ts
new file mode 100644
index 0000000..24f1654
--- /dev/null
+++ b/jb-ui/src/store.ts
@@ -0,0 +1,30 @@
+import appReducers from "@/models/appSlice"
+import grlStatsReducers from "@/models/grlStatsSlice"
+import profilingQuestionsReducers from "@/models/profilingQuestionsSlice"
+import type { Action, ThunkAction } from '@reduxjs/toolkit'
+import { configureStore } from '@reduxjs/toolkit'
+
+
+export const store = configureStore({
+ reducer: {
+ app: appReducers,
+ stats: grlStatsReducers,
+ profilingQuestions: profilingQuestionsReducers,
+ }
+})
+
+// Infer the type of `store`
+export type AppStore = typeof store
+// Infer the `AppDispatch` type from the store itself
+export type AppDispatch = typeof store.dispatch
+// Same for the `RootState` type
+
+export type RootState = ReturnType<typeof store.getState>
+
+// Define a reusable type describing thunk functions
+export type AppThunk<ThunkReturnType = void> = ThunkAction<
+ ThunkReturnType,
+ RootState,
+ unknown,
+ Action
+>
diff --git a/jb-ui/src/types/matomo.d.ts b/jb-ui/src/types/matomo.d.ts
new file mode 100644
index 0000000..f80c908
--- /dev/null
+++ b/jb-ui/src/types/matomo.d.ts
@@ -0,0 +1,7 @@
+export {};
+
+declare global {
+ interface Window {
+ _mtm: any[];
+ }
+} \ No newline at end of file
diff --git a/jb-ui/src/vite-env.d.ts b/jb-ui/src/vite-env.d.ts
new file mode 100644
index 0000000..11d7a7a
--- /dev/null
+++ b/jb-ui/src/vite-env.d.ts
@@ -0,0 +1,17 @@
+/// <reference types="vite/client" />
+
+interface ViteTypeOptions {
+ // By adding this line, you can make the type of ImportMetaEnv strict
+ // to disallow unknown keys.
+ // strictImportMetaEnv: unknown
+}
+
+interface ImportMetaEnv {
+ readonly VITE_BASENAME: string
+ readonly VITE_BPID: string
+ readonly VITE_TAG_MANAGER: string
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv
+} \ No newline at end of file