Skip to main content

Crate virustotal_rs

Crate virustotal_rs 

Source
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_string implementations for enums with simple string mappings
map_err_context
Map error with context