import {z} from 'zod' export type GetApiPortfolioItemsItemIdSnapshotsArgs = {item_id: string, limit?: number | undefined, offset?: (number | null) | undefined, cursor?: (string | null) | undefined}; export type GetApiPortfolioItemsItemIdSnapshotsOptions = {baseUrl?: string | undefined, APIKeyHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const monitorableAttributes = z.enum(["sos", "liens", "litigations", "bankruptcies", "website_analysis", "pep", "ofac", "identity_network"]); export const v1BusinessStructure = z.enum(["SOLE_PROPRIETORSHIP", "GENERAL_PARTNERSHIP", "LLC", "LLP", "LLLP", "LP", "C_CORPORATION", "S_CORPORATION", "B_CORPORATION", "NONPROFIT", "COOPERATIVE", "TRUST", "PROFESSIONAL_ASSOCIATION", "PROFESSIONAL_CORPORATION", "TRADE_NAME", "BANK", "CREDIT_UNION", "INSURANCE", "OTHER"]); export const v1StateAbbreviation = z.enum(["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "PR", "VI", "AE", "AA", "AP", "GU", "AS"]); export const v1AddressRDI = z.enum(["Residential", "Commercial"]); export const v1USPSDeliveryType = z.enum(["FIRM", "GENERAL_DELIVERY", "HIGH_RISE", "POST_OFFICE", "RURAL_ROUTE", "STREET"]); export const v1EntitySource = z.enum(["SOS", "Online"]); export const v1AddressSummaryResponseWithSources = z.object({id: z.string(), street: z.string(), city: z.string(), state: v1StateAbbreviation, zip: z.string(), latitude: z.number(), longitude: z.number(), rdi: v1AddressRDI.nullable().optional(), deliverable: z.boolean().nullable().optional(), cmra: z.boolean().nullable().optional(), url: z.string().min(1).max(2083).nullable().optional(), delivery_type: v1USPSDeliveryType.nullable().optional(), sources: z.array(v1EntitySource).optional()}); export const v1ConfidenceLevel = z.enum(["high", "medium", "low"]); export const v1DiscoveredInstagramMetadata = z.object({is_private: z.boolean().nullable().optional(), is_business_account: z.boolean().nullable().optional(), has_business_address: z.boolean().nullable().optional(), bio: z.string().nullable().optional(), followers_count: z.number().int().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), address: z.string().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredLinkedInMetadata = z.object({company_size_range: z.string().nullable().optional(), industry: z.string().nullable().optional(), followers_count: z.number().int().nullable().optional(), phone_number: z.string().nullable().optional(), bio: z.string().nullable().optional(), email: z.string().nullable().optional(), number_of_employees: z.number().int().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredFacebookMetadata = z.object({is_business_page: z.boolean().nullable().optional(), has_reviews: z.boolean().nullable().optional(), check_ins_count: z.number().int().nullable().optional(), followers_count: z.number().int().nullable().optional(), bio: z.string().nullable().optional(), phone_number: z.string().nullable().optional(), address: z.string().nullable().optional(), email: z.string().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredXMetadata = z.object({is_verified: z.boolean().nullable().optional(), follower_count: z.number().int().nullable().optional(), bio: z.string().nullable().optional(), joined_date: z.string().nullable().optional(), address: z.string().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredYouTubeMetadata = z.object({is_verified: z.boolean().nullable().optional(), subscriber_count: z.number().int().nullable().optional(), channel_type: z.string().nullable().optional(), has_business_email: z.boolean().nullable().optional(), channel_description: z.string().nullable().optional(), followers_count: z.number().int().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredTikTokMetadata = z.object({is_verified: z.boolean().nullable().optional(), is_business_account: z.boolean().nullable().optional(), follower_count: z.number().int().nullable().optional(), bio: z.string().nullable().optional(), has_business_website: z.boolean().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredPinterestMetadata = z.object({follower_count: z.number().int().nullable().optional(), monthly_views: z.number().int().nullable().optional(), bio: z.string().nullable().optional(), has_business_website: z.boolean().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), business_website: z.string().nullable().optional()}); export const v1DiscoveredSocialProfile = z.object({site: z.enum(["linked_in:personal", "linked_in:company", "twitter", "instagram", "facebook", "youtube", "tiktok", "pinterest", "x"]), username: z.string(), confidence: v1ConfidenceLevel.nullable().optional(), metadata: z.union([v1DiscoveredInstagramMetadata, v1DiscoveredLinkedInMetadata, v1DiscoveredFacebookMetadata, v1DiscoveredXMetadata, v1DiscoveredYouTubeMetadata, v1DiscoveredTikTokMetadata, v1DiscoveredPinterestMetadata]).nullable().optional(), found_on: z.array(z.enum(["INPUT_WEBSITE", "FOUND_WEBSITE"])).optional(), url: z.string()}); export const v1ReviewSource = z.enum(["yelp", "google", "trustpilot", "tripadvisor", "other"]); export const v1ReviewDetail = z.object({username: z.string(), text: z.string(), date: z.string(), rating: z.number().int()}); export const v1GoogleReviewMetadata = z.object({open_state: z.string().nullable().optional(), operating_hours: z.record(z.string(), z.unknown()).nullable().optional(), description: z.string().nullable().optional(), types: z.array(z.string()).nullable().optional(), service_options: z.record(z.string(), z.unknown()).nullable().optional()}); export const v1DiscoveredReview = z.object({source: v1ReviewSource.nullable().optional(), url: z.string(), confidence: v1ConfidenceLevel.nullable().optional(), rating: z.number().gte(0).lte(5).nullable().optional(), volume: z.number().int().gte(0).nullable().optional(), summary: z.string().nullable().optional(), phone_number: z.string().nullable().optional(), address: z.string().nullable().optional(), business_website: z.string().nullable().optional(), reviews: z.array(v1ReviewDetail).optional(), metadata: v1GoogleReviewMetadata.nullable().optional()}); export const v1DirectoryListingPerson = z.object({name: z.string(), title: z.string().nullable().optional()}); export const v1DirectoryListingResponse = z.object({source: z.string().nullable().optional(), url: z.string().nullable().optional(), category: z.string().nullable().optional(), business_name: z.string().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), business_website: z.string().nullable().optional(), address: z.string().nullable().optional(), people: z.array(v1DirectoryListingPerson).optional()}); export const v1AddressSummaryResponse = z.object({id: z.string(), street: z.string(), city: z.string(), state: v1StateAbbreviation, zip: z.string(), latitude: z.number(), longitude: z.number(), rdi: v1AddressRDI.nullable().optional(), deliverable: z.boolean().nullable().optional(), cmra: z.boolean().nullable().optional(), url: z.string().min(1).max(2083).nullable().optional(), delivery_type: v1USPSDeliveryType.nullable().optional()}); export const v1CorporateRegistrationDomesticStatus = z.enum(["foreign", "domestic", "unknown"]); export const v1CorporateRegistrationStatus = z.enum(["active", "inactive", "unknown"]); export const v1CorporateRegistrationAgentResponse = z.object({name: z.string(), address: v1AddressSummaryResponse.nullable().optional()}); export const v1RegistrationOfficerResponse = z.object({name: z.string(), titles: z.array(z.string()).optional()}); export const v1RegistrationResponse = z.object({id: z.string(), name: z.string(), issue_date: z.string().nullable().optional(), inactive_date: z.string().nullable().optional(), dissolution_date: z.string().nullable().optional(), file_number: z.string(), state: v1StateAbbreviation, address: v1AddressSummaryResponse.nullable().optional(), registration_type: v1CorporateRegistrationDomesticStatus.nullable().optional(), status: v1CorporateRegistrationStatus, standing: z.string().nullable().optional(), registered_agent: v1CorporateRegistrationAgentResponse.nullable().optional(), officers: z.array(v1RegistrationOfficerResponse).optional()}); export const v1BusinessOfficerResponse = z.object({name: z.string(), titles: z.array(z.string()).optional(), states: z.array(v1StateAbbreviation).optional(), sources: z.array(v1EntitySource).optional()}); export const v1VisaRiskTier = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const v1MCC = z.object({code: z.string(), description: z.string().nullable().optional(), mastercard_risk: z.boolean().nullable().optional(), visa_risk_tier: v1VisaRiskTier.nullable().optional()}); export const v1SICCode = z.object({code: z.string(), description: z.string().nullable().optional()}); export const v1RiskLevel = z.enum(["high", "medium", "low", "no_risk"]); export const v1PredictedNaicsResponse = z.object({code: z.string(), title: z.string(), accuracy: z.number().nullable().optional(), keywords: z.array(z.string()).nullable().optional(), mcc_codes: z.array(v1MCC).nullable().optional(), sic_codes: z.array(v1SICCode).nullable().optional(), risk_level: v1RiskLevel.nullable().optional(), reasoning: z.string().nullable().optional()}); export const v1WatchlistDataSource = z.enum(["Death Master File", "Department of Treasury, Office of Foreign Assets Control", "Politically Exposed Persons", "IRS Exempt Organizations List", "FBI Wanted List", "Department of Commerce, Consolidated Screening List", "Consolidated Canadian Autonomous Sanctions List", "HHS OIG List of Excluded Individuals/Entities", "Baselayer Fraud Consortium"]); export const v1WatchlistHitResponse = z.object({code: z.string(), name: v1WatchlistDataSource, count: z.number().int(), details: z.array(z.record(z.string(), z.unknown())).nullable().optional()}); export const v1SecRegistrationResponse = z.object({cik: z.string(), tickers: z.array(z.string()), exchanges: z.array(z.string()), sec_edgar_url: z.string().min(1).max(2083)}); export const v1BusinessResponse = z.object({id: z.string(), name: z.string(), structure: v1BusinessStructure.nullable().optional(), addresses: z.array(v1AddressSummaryResponseWithSources).optional(), phone_numbers: z.array(z.string()).optional(), email: z.string().nullable().optional(), website: z.string().nullable().optional(), social_profiles: z.array(v1DiscoveredSocialProfile).nullable().optional(), reviews: z.array(v1DiscoveredReview).nullable().optional(), directory_listings: z.array(v1DirectoryListingResponse).nullable().optional(), ein: z.string().nullable().optional(), incorporation_state: v1StateAbbreviation.nullable().optional(), incorporation_date: z.string().nullable().optional(), months_in_business: z.number().int().nullable().optional(), primary_address: v1AddressSummaryResponse.nullable().optional(), alternative_names: z.array(z.string()).optional(), registrations: z.array(v1RegistrationResponse).optional(), business_officers: z.array(v1BusinessOfficerResponse).optional(), predicted_naics: z.array(v1PredictedNaicsResponse).optional(), watchlist_hits: z.array(v1WatchlistHitResponse).optional(), sec_registrations: z.array(v1SecRegistrationResponse).optional(), url: z.string().min(1).max(2083), console_url: z.string().min(1).max(2083), revenue: z.unknown(), phone_number: z.string().nullable().optional(), address: z.string().nullable()}); export const v1ScoreType = z.enum(["fraud", "risk", "kyb"]); export const v1ScoreResponse = z.object({type: v1ScoreType, score: z.number(), rating: z.string()}); export const v1LienPartyRole = z.enum(["Debtor", "Secured Party", "Record Owner"]); export const v1LienPartyResponse = z.object({id: z.string(), role: v1LienPartyRole, name: z.string(), address: v1AddressSummaryResponse.nullable(), type: z.string()}); export const v1LienAmendmentResponse = z.object({filing_number: z.string(), filing_type: z.string(), filing_date: z.string(), number_of_pages: z.number().int()}); export const v1LienCollateralStatementResponse = z.object({text: z.string(), sort_order: z.number().int()}); export const v1MatchType = z.enum(["NO_MATCH", "SIMILAR", "EXACT"]); export const v1BusinessOrPersonType = z.enum(["Business", "Person"]); export const v1LienFilingResponse = z.object({id: z.string(), state: v1StateAbbreviation, filing_number: z.string(), filing_type: z.string(), filing_date: z.string(), lapse_date: z.string(), status: z.string(), number_of_pages: z.number().int(), document_filename: z.string().nullable().optional(), parties: z.array(v1LienPartyResponse).optional(), amendments: z.array(v1LienAmendmentResponse).optional(), collateral_statements: z.array(v1LienCollateralStatementResponse).optional(), last_updated_at: z.string(), match_level: v1MatchType.nullable().optional(), search_entity_name: z.string().nullable().optional(), search_entity_type: v1BusinessOrPersonType.nullable().optional()}); export const v1CourtStateAbbreviation = z.enum(["US", "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "PR", "CN", "VI", "AE", "AA", "AP", "MX"]); export const v1BankruptcyType = z.enum(["Chapter 7", "Chapter 11", "Chapter 12", "Chapter 13", "Chapter 15"]); export const v1DocketParty = z.object({id: z.string(), name: z.string(), party_type: z.string().nullable().optional(), counsel: z.array(z.string()).optional()}); export const v1DocketExhibit = z.object({id: z.string(), title: z.string(), is_available: z.boolean().optional(), document_url: z.string().nullable()}); export const v1DocketUpdate = z.object({id: z.string(), title: z.string().nullable().optional(), contents: z.string().nullable().optional(), date: z.string().nullable().optional(), exhibits: z.array(v1DocketExhibit).optional()}); export const v1NormalizedDocketStatus = z.enum(["open", "closed"]); export const v1DocketResponse = z.object({id: z.string(), docket_number: z.string(), court: z.string(), state: v1CourtStateAbbreviation.nullable().optional(), division: z.string().nullable().optional(), judges: z.array(z.string()).optional(), title: z.string(), case_type: z.string().nullable().optional(), status: z.string().nullable().optional(), is_bankruptcy: z.boolean(), bankruptcy_type: v1BankruptcyType.nullable().optional(), date_filed: z.string().optional(), last_synced_at: z.string().nullable().optional(), parties: z.array(v1DocketParty).optional(), updates: z.array(v1DocketUpdate).optional(), match_level: v1MatchType.nullable().optional(), search_entity_name: z.string().nullable().optional(), search_entity_type: v1BusinessOrPersonType.nullable().optional(), risk_level: v1RiskLevel.nullable().optional(), normalized_status: v1NormalizedDocketStatus.nullable().optional()}); export const v1WebsiteRedirectInfo = z.object({is_redirect_url: z.boolean(), redirects_to: z.string()}); export const v1SocialProfile = z.object({site: z.enum(["linked_in:personal", "linked_in:company", "twitter", "instagram", "facebook", "youtube", "tiktok", "pinterest", "x"]), username: z.string(), url: z.string()}); export const v1WebsiteAnalysisPerson = z.object({name: z.string(), titles: z.array(z.string())}); export const v1WebsiteBuildStatus = z.enum(["coming_soon", "inactive", "active"]); export const v1WhoIsRecordResponse = z.object({domain_created_at: z.string().nullable(), domain_age_months: z.number().int().nullable().optional(), domain_updated_at: z.string().nullable(), domain_expires_at: z.string().nullable(), registrar: z.string().nullable()}); export const v1SSLInvalidReason = z.enum(["CERTIFICATE_EXPIRED", "HOSTNAME_MISMATCH", "SELF_SIGNED", "REVOKED", "UNTRUSTED_AUTHORITY", "VERIFICATION_FAILED", "NOT_HTTPS", "CONNECTION_TIMED_OUT", "UNABLE_TO_CONNECT", "SERVER_DISCONNECTED", "SERVER_ERROR", "CONNECTION_ERROR"]); export const v1SSLCertificateType = z.enum(["DV", "OV", "EV", "Unknown"]); export const v1TLSVersion = z.enum(["TLSv1.0", "TLSv1.1", "TLSv1.2", "TLSv1.3", "SSLv3", "Unknown"]); export const v1SSLValidityInfo = z.object({is_valid: z.boolean().nullable().optional(), reason: v1SSLInvalidReason.nullable().optional(), issuer: z.string().nullable().optional(), subject: z.string().nullable().optional(), issued_date: z.string().nullable().optional(), expiry_date: z.string().nullable().optional(), days_until_expiry: z.number().int().nullable().optional(), cert_age_days: z.number().int().nullable().optional(), certificate_type: v1SSLCertificateType.nullable().optional(), is_wildcard: z.boolean().nullable().optional(), key_size: z.number().int().nullable().optional(), tls_version: v1TLSVersion.nullable().optional(), is_self_signed: z.boolean().nullable().optional(), is_revoked: z.boolean().nullable().optional()}); export const v1WebsiteStructureMetrics = z.object({depth: z.string(), breadth: z.string()}); export const v1WebsiteAnalysisDetails = z.object({id: z.string(), url: z.string().min(1), redirects: v1WebsiteRedirectInfo.nullable().optional(), parked: z.boolean().nullable(), email_deliverable: z.boolean().nullable().optional(), phone_numbers: z.array(z.string()).nullable().optional(), emails: z.array(z.string()).nullable(), social_profiles: z.array(v1SocialProfile).nullable(), addresses: z.array(v1AddressSummaryResponse).optional(), people: z.array(v1WebsiteAnalysisPerson).nullable().optional(), website_build_status: v1WebsiteBuildStatus.nullable().optional(), website_summary: z.string().nullable().optional(), console_url: z.string().min(1).max(2083), screenshot_url: z.string().min(1).max(2083).nullable().optional(), whois_record: v1WhoIsRecordResponse.nullable().optional(), ssl_validity: v1SSLValidityInfo.nullable().optional(), website_structure_metrics: v1WebsiteStructureMetrics.nullable().optional()}); export const v1ApplicationDetailCombinationsResponse = z.object({created_at: z.string(), name: z.string(), address: z.string(), tin: z.string().nullable().optional(), officer_names: z.array(z.string()).optional()}); export const v1OrganizationType = z.enum(["neobank", "community_bank", "credit_union", "regional_bank", "national_bank", "fintech", "smb_lender", "merchant_cash_advanced", "processor", "infrastructure", "other"]); export const v1OrganizationTeam = z.enum(["cSuite", "risk", "compliance", "engineering", "operations", "innovation", "other"]); export const v1OrganizationProduct = z.enum(["savings", "credit", "working_capital", "equipment", "cash_advance", "payments", "other"]); export const v1ApplicationVelocityResponse = z.object({created_at: z.string(), type: v1OrganizationType, team: v1OrganizationTeam.nullable().optional(), product: v1OrganizationProduct.nullable().optional()}); export const v1BusinessPortfolioItemSnapshotData = z.object({type: z.literal("Business"), business: v1BusinessResponse, scores: z.array(v1ScoreResponse), liens: z.array(v1LienFilingResponse).nullable(), dockets: z.array(v1DocketResponse).nullable(), bankruptcies: z.array(v1DocketResponse).nullable(), business_website_analysis: v1WebsiteAnalysisDetails.nullable(), item_website_analysis: v1WebsiteAnalysisDetails.nullable(), search_combinations: z.array(v1ApplicationDetailCombinationsResponse).nullable(), search_history: z.array(v1ApplicationVelocityResponse).nullable()}); export const v1Gender = z.enum(["M", "F"]); export const v1MaritalStatus = z.enum(["married", "single", "divorced", "widowed", "separated", "domestic_partner", "civil_union", "other"]); export const v1PersonResponse = z.object({id: z.string(), first_name: z.string(), last_name: z.string(), ssn: z.string(), middle_name: z.string().nullable().optional(), phone_number: z.string().nullable().optional(), email: z.string().nullable().optional(), date_of_birth: z.string().nullable().optional(), gender: v1Gender.nullable().optional(), marital_status: v1MaritalStatus.nullable().optional(), suffix: z.string().nullable().optional(), title: z.string().nullable().optional(), created_at: z.string(), updated_at: z.string().nullable().optional(), dockets: z.array(v1DocketResponse).optional(), liens: z.array(v1LienFilingResponse).optional(), watchlist_hits: z.array(v1WatchlistHitResponse).optional()}); export const v1PersonPortfolioItemSnapshotData = z.object({type: z.literal("Person"), person: v1PersonResponse, liens: z.array(v1LienFilingResponse).nullable(), dockets: z.array(v1DocketResponse).nullable(), bankruptcies: z.array(v1DocketResponse).nullable()}); export const v1PortfolioItemSnapshotResponse = z.object({id: z.string(), portfolio_item_id: z.string(), attributes: z.array(monitorableAttributes).optional(), schema_version: z.number().int(), data: z.discriminatedUnion("type", [v1BusinessPortfolioItemSnapshotData, v1PersonPortfolioItemSnapshotData]), created_at: z.string()}).and(z.record(z.string(), z.unknown())); export const getApiPortfolioItemsItemIdSnapshotsResponse = z.array(v1PortfolioItemSnapshotResponse); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get Portfolio Item Snapshots * * GET /portfolio/items/{item_id}/snapshots */ export const getApiPortfolioItemsItemIdSnapshots = async (args: GetApiPortfolioItemsItemIdSnapshotsArgs, options?: GetApiPortfolioItemsItemIdSnapshotsOptions) => { const {baseUrl = "https://api.baselayer.com", fetch: fetchFn = fetch, APIKeyHeader} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.limit != null) query.append("limit", String(args.limit)) if (args.offset != null) query.append("offset", String(args.offset)) if (args.cursor != null) query.append("cursor", String(args.cursor)) if (APIKeyHeader !== undefined) headers.set("X-API-Key", APIKeyHeader) const url = `${baseUrl.replace(/\/+$/, '')}/portfolio/items/${encodeURIComponent(String(args.item_id))}/snapshots${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiPortfolioItemsItemIdSnapshotsResponse, await res.json()) };