Expand description
Async Rust SDK for the VirusTotal API v3.
The core Client exposes typed resource clients for files, URLs, domains, IP
addresses, search, collections, graphs, hunting, feeds, and private APIs. Optional
crate features add the CLI and MCP server without expanding the default dependency
surface.
This is an independent, community-maintained project. It is not affiliated with, endorsed by, or maintained by VirusTotal or Google.
§Quick start
use virustotal_rs::{ApiTier, ClientBuilder};
let client = ClientBuilder::new()
.api_key(std::env::var("VIRUSTOTAL_API_KEY")?)
.tier(ApiTier::Public)
.build()?;
let report = client
.files()
.get("44d88612fea8a8f36de82e1278abb02f")
.await?;
println!("{}", report.object.id);ApiTier controls only this crate’s in-process limiter; VirusTotal account
privileges and server-side quotas remain authoritative. Core requests are not
retried automatically. See the repository’s configuration guide for credential,
rate-limit, retry, and custom-base-URL behavior.
Re-exports§
pub use analysis::Analysis;pub use analysis::AnalysisResponse;pub use attack_tactics::AttackTactic;pub use attack_tactics::AttackTacticClient;pub use attack_techniques::AttackTechnique;pub use attack_techniques::AttackTechniqueClient;pub use auth::ApiKey;pub use auth::ApiTier;pub use client::Client;pub use client::ClientBuilder;pub use client_utils::COMMON_API_KEY_VARS;pub use client_utils::ClientUtils;pub use client_utils::DEFAULT_RETRY_ATTEMPTS;pub use client_utils::DEFAULT_RETRY_DELAY;pub use client_utils::DEFAULT_TIMEOUT;pub use client_utils::EnhancedClientBuilder;pub use client_utils::HeaderUtils;pub use client_utils::PRIVATE_API_KEY_VARS;pub use client_utils::RateLimitStatus;pub use client_utils::RateLimiter;pub use client_utils::RetryConfig;pub use client_utils::TokenBucketLimiter;pub use client_utils::detect_api_tier;pub use collections::Collection as IocCollection;pub use collections::CollectionAttributes;pub use collections::CollectionItemsRequest;pub use collections::CollectionOrder;pub use collections::CollectionsClient;pub use collections::CreateCollectionRequest;pub use collections::DomainDescriptor;pub use collections::ExportFormat;pub use collections::FileDescriptor;pub use collections::IpAddressDescriptor;pub use collections::UpdateCollectionRequest;pub use collections::UrlDescriptor;pub use comments::Comment;pub use comments::CommentIterator;pub use comments::CommentVoteType;pub use comments::CommentsClient;pub use comments::VoteCommentResponse;pub use crowdsourced_yara_rules::CrowdsourcedYaraRule;pub use crowdsourced_yara_rules::CrowdsourcedYaraRulesClient;pub use crowdsourced_yara_rules::YaraRuleMeta;pub use crowdsourced_yara_rules::YaraRuleOrder;pub use display::DisplayDetails;pub use display::DisplayOptions;pub use display::DisplayStats;pub use display::DisplayVotes;pub use display::ThreatLevel;pub use display::VoteConsensus;pub use display::display_options;pub use display::format_file_size;pub use display::format_list;pub use display::format_reputation;pub use display::format_table;pub use display::format_timestamp;pub use display::format_timestamp_relative;pub use display::pretty_print_json;pub use display::truncate_hash;pub use display::truncate_text;pub use domains::Domain;pub use domains::DomainClient;pub use error::Error;pub use error::Result;pub use feeds::BehaviorContextAttributes;pub use feeds::BehaviorFeedItem;pub use feeds::DomainFeedItem;pub use feeds::FeedConfig;pub use feeds::FeedItem;pub use feeds::FeedSubmitter;pub use feeds::FeedsClient;pub use feeds::IpFeedItem;pub use feeds::UrlFeedItem;pub use file_behaviours::FileBehaviour;pub use file_behaviours::FileBehaviourClient;pub use files::File;pub use files::FileBehavior;pub use files::FileBehaviorSummary;pub use files::FileBehaviorSummaryResponse;pub use files::FileClient;pub use files::MitreTactic;pub use files::MitreTechnique;pub use files::MitreTrees;pub use graphs::AddGraphCommentRequest;pub use graphs::CreateGraphRequest;pub use graphs::GrantPermissionRequest;pub use graphs::Graph;pub use graphs::GraphClient;pub use graphs::GraphOrder;pub use graphs::GraphOwner;pub use graphs::GraphPermissionCheckResponse;pub use graphs::GraphRelationshipDescriptor;pub use graphs::GraphVisibility;pub use graphs::PermissionDescriptor;pub use graphs::UpdateGraphRequest;pub use groups::AdminsResponse;pub use groups::Group;pub use groups::GroupApiQuota;pub use groups::GroupAttributes;pub use groups::GroupQuotas;pub use groups::GroupResponse;pub use groups::GroupUpdate;pub use groups::GroupUpdateAttributes;pub use groups::GroupUpdateRequest;pub use groups::GroupsClient;pub use groups::UserDescriptor;pub use groups::UserListRequest;pub use groups::UsersResponse as GroupUsersResponse;pub use ioc_stream::EntityType;pub use ioc_stream::HuntingInfo;pub use ioc_stream::IocStreamClient;pub use ioc_stream::IocStreamContext;pub use ioc_stream::IocStreamNotification;pub use ioc_stream::IocStreamObject;pub use ioc_stream::IocStreamOrder;pub use ioc_stream::NotificationSource;pub use ioc_stream::SourceType;pub use ip_addresses::IpAddress;pub use ip_addresses::IpAddressClient;pub use iterator_utils::BatchIterator;pub use iterator_utils::CachedIterator;pub use iterator_utils::Collectable;pub use iterator_utils::CollectionIteratorAdapter;pub use iterator_utils::EnhancedCollectionIterator;pub use iterator_utils::FilteredIterator;pub use iterator_utils::IteratorExt;pub use iterator_utils::MappedIterator;pub use iterator_utils::Pageable;pub use iterator_utils::PaginatedIterator;pub use iterator_utils::ProgressIterator;pub use iterator_utils::ProgressStats;pub use iterator_utils::ProgressTracker;pub use iterator_utils::RetryIterator;pub use iterator_utils::SkippedIterator;pub use iterator_utils::TakeUntilIterator;pub use iterator_utils::ThrottledIterator;pub use livehunt::AddEditorsRequest;pub use livehunt::CreateLivehuntRulesetRequest;pub use livehunt::EditorDescriptor;pub use livehunt::LivehuntClient;pub use livehunt::LivehuntNotification;pub use livehunt::LivehuntRuleset;pub use livehunt::LivehuntRulesetOrder;pub use livehunt::MatchObjectType;pub use livehunt::NotificationFile;pub use livehunt::NotificationFileContext;pub use livehunt::NotificationOrder;pub use livehunt::OperationResponse;pub use livehunt::PermissionCheckResponse;pub use livehunt::TransferOwnershipRequest;pub use livehunt::UpdateLivehuntRulesetRequest;pub use metadata::EngineInfo;pub use metadata::Metadata;pub use metadata::MetadataResponse;pub use metadata::RelationshipInfo;pub use objects::Collection;pub use objects::CollectionIterator;pub use objects::Object;pub use objects::ObjectResponse;pub use popular_threat_categories::PopularThreatCategoriesResponse;pub use popular_threat_categories::ThreatCategory;pub use private_files::AnalysisStats;pub use private_files::CreatePrivateZipData;pub use private_files::CreatePrivateZipRequest;pub use private_files::DroppedFile;pub use private_files::EngineResult;pub use private_files::FileInfo;pub use private_files::PrivateAnalysis;pub use private_files::PrivateAnalysisMeta;pub use private_files::PrivateAnalysisResponse;pub use private_files::PrivateFile;pub use private_files::PrivateFileBehavior;pub use private_files::PrivateFileBehaviorAttributes;pub use private_files::PrivateFileUploadParams;pub use private_files::PrivateFileUploadResponse;pub use private_files::PrivateFilesClient;pub use private_files::PrivateZipDownloadUrlResponse;pub use private_files::PrivateZipFile;pub use private_files::PrivateZipFileAttributes;pub use private_files::PrivateZipFileData;pub use private_files::ProcessInfo;pub use private_files::ReanalyzeParams;pub use private_files::UploadUrlResponse;pub use private_urls::PrivateUrl;pub use private_urls::PrivateUrlAttributes;pub use private_urls::PrivateUrlResponse;pub use private_urls::PrivateUrlScanData;pub use private_urls::PrivateUrlScanParams;pub use private_urls::PrivateUrlScanResponse;pub use private_urls::PrivateUrlsClient;pub use private_urls::Votes;pub use references::CreateReferenceRequest;pub use references::Reference;pub use references::ReferencesClient;pub use retrohunt::Corpus;pub use retrohunt::CreateRetrohuntJobRequest;pub use retrohunt::JobStatus;pub use retrohunt::MatchingFileContext;pub use retrohunt::RetrohuntClient;pub use retrohunt::RetrohuntJob;pub use retrohunt::RetrohuntMatchingFile;pub use retrohunt::TimeRange;pub use search::FileSearchResult;pub use search::SearchClient;pub use search::SearchOrder;pub use search::SearchResult;pub use search::SnippetResponse;pub use sigma_rules::SigmaRule;pub use sigma_rules::SigmaRuleResponse;pub use sigma_rules::SigmaRulesClient;pub use threat_actors::RelationshipOrder;pub use threat_actors::ThreatActor;pub use threat_actors::ThreatActorOrder;pub use threat_actors::ThreatActorsClient;pub use url_utils::EndpointBuilder;pub use url_utils::Endpoints;pub use url_utils::QueryBuilder;pub use url_utils::VT_API_BASE;pub use url_utils::VirusTotalUrlBuilder;pub use url_utils::build_query_string;pub use url_utils::encode_path_segment;pub use url_utils::validate_domain;pub use url_utils::validate_hash;pub use url_utils::validate_ip;pub use urls::Url;pub use urls::UrlClient;pub use users::ApiQuota;pub use users::User;pub use users::UserAttributes;pub use users::UserPrivileges;pub use users::UserQuotas;pub use users::UserResponse;pub use users::UserUpdate;pub use users::UserUpdateAttributes;pub use users::UserUpdateRequest;pub use users::UsersClient;pub use votes::Vote;pub use votes::VoteVerdict;pub use yara_rulesets::YaraRuleset;pub use yara_rulesets::YaraRulesetResponse;pub use yara_rulesets::YaraRulesetsClient;pub use zip_files::CreateZipFileRequest;pub use zip_files::ZipFile;pub use zip_files::ZipFileStatus;pub use zip_files::ZipFilesClient;
Modules§
- analysis
- attack_
tactics - attack_
techniques - auth
- client
- client_
utils - Client utilities for VirusTotal API
- collections
- Collections management for VirusTotal threat intelligence
- comments
- common
- crowdsourced_
yara_ rules - display
- Display utilities for VirusTotal data types
- domains
- error
- Enhanced error handling for VirusTotal API operations
- feeds
- VirusTotal Intelligence Feeds module
- file_
behaviours - VirusTotal File Behaviours module
- files
- File analysis and upload functionality for VirusTotal API
- graphs
- Graph module for VirusTotal API
- groups
- ioc_
stream - ip_
addresses - iterator_
utils - Iterator utilities and patterns for VirusTotal API
- livehunt
- macros
- Macros for reducing boilerplate code
- metadata
- objects
- popular_
threat_ categories - private_
files - Private file operations for the VirusTotal API
- private_
files_ client - Private Files Client - Modular implementation
- private_
urls - rate_
limit - references
- retrohunt
- search
- sigma_
rules - threat_
actors - url_
utils - URL building utilities for VirusTotal API
- urls
- users
- votes
- yara_
rulesets - zip_
files
Macros§
- bail_if
- Error handling macros for reducing boilerplate
- context
- Add context to a result
- create_
lookup_ table - Macro to create a static lookup table for enum to string conversions
- ensure
- Ensure condition is true or return error
- impl_
common_ client_ methods - impl_
enum_ display - Macro for implementing Display trait using the to_string method This is useful when you want both to_string and Display implementations
- impl_
enum_ string_ conversion - Combined macro that implements both to_string and Display for an enum
- impl_
enum_ to_ string - Macro to generate
to_stringimplementations for enums with simple string mappings - map_
err_ context - Map error with context