Master Blaster

A simple web API for BLAST which returns results as XML.

Endpoints

GET .../databases

Returns a list of supported databases, one per line, valid for the db parameter.

POST .../blast

Requires the POST parameters db and query to select the BLAST database and query sequence. The query sequence must be nucleotides.

Optional parameters are:

ParameterDescription
max_target_seqs Positive integer to use for -max_target_seqs option to blastn. Defaults to 10.
dust String used for the -dust option to blastn. Unused by default. You may wish to set this to no, for example.

On success (HTTP 200) the response body is the XML output by BLAST. Both HTTP 4xx and 5xx status codes are used on failure with plain text bodies containing an error message.

HTTP Status Reason
400 Bad Request You did not provide a valid database or a query sequence
500 Internal Server Error An unexpected error occurred while processing your request

If you run into issues, please let us know!


Created by Thomas Sibley of the Mullins Lab at the University of Washington, Department of Microbiology.

Questions? Drop us a line.

Source code

Examples

curl

curl -X POST http://indra.mullins.microbiol.washington.edu/masterblaster/blast \
     --data db=HXB2 \
     --data query=TCATTATATAATACAGTAGCAACCCTCTATTGTGTGCATCAAAGG
<?xml version="1.0"?>
<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
<BlastOutput>
  <BlastOutput_program>blastn</BlastOutput_program>
  <BlastOutput_version>BLASTN 2.2.30+</BlastOutput_version>
  <BlastOutput_reference>Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb Miller (2000), "A greedy algorithm for aligning DNA sequences", J Comput Biol 2000; 7(1-2):203-14.</BlastOutput_reference>
  <BlastOutput_db>/opt/home/apps/masterblaster/db/HXB2</BlastOutput_db>
  <BlastOutput_query-ID>Query_1</BlastOutput_query-ID>
  <BlastOutput_query-def>No definition line</BlastOutput_query-def>
  <BlastOutput_query-len>45</BlastOutput_query-len>
  <BlastOutput_param>
    <Parameters>
      <Parameters_expect>10</Parameters_expect>
      <Parameters_sc-match>1</Parameters_sc-match>
      <Parameters_sc-mismatch>-2</Parameters_sc-mismatch>
      <Parameters_gap-open>0</Parameters_gap-open>
      <Parameters_gap-extend>0</Parameters_gap-extend>
      <Parameters_filter>L;m;</Parameters_filter>
    </Parameters>
  </BlastOutput_param>
<BlastOutput_iterations>
<Iteration>
  <Iteration_iter-num>1</Iteration_iter-num>
  <Iteration_query-ID>Query_1</Iteration_query-ID>
  <Iteration_query-def>No definition line</Iteration_query-def>
  <Iteration_query-len>45</Iteration_query-len>
<Iteration_hits>
<Hit>
  <Hit_num>1</Hit_num>
  <Hit_id>gnl|BL_ORD_ID|0</Hit_id>
  <Hit_def>K03455|HIVHXB2CG</Hit_def>
  <Hit_accession>0</Hit_accession>
  <Hit_len>9719</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_num>1</Hsp_num>
      <Hsp_bit-score>84.2195</Hsp_bit-score>
      <Hsp_score>45</Hsp_score>
      <Hsp_evalue>1.46556e-20</Hsp_evalue>
      <Hsp_query-from>1</Hsp_query-from>
      <Hsp_query-to>45</Hsp_query-to>
      <Hsp_hit-from>1018</Hsp_hit-from>
      <Hsp_hit-to>1062</Hsp_hit-to>
      <Hsp_query-frame>1</Hsp_query-frame>
      <Hsp_hit-frame>1</Hsp_hit-frame>
      <Hsp_identity>45</Hsp_identity>
      <Hsp_positive>45</Hsp_positive>
      <Hsp_gaps>0</Hsp_gaps>
      <Hsp_align-len>45</Hsp_align-len>
      <Hsp_qseq>TCATTATATAATACAGTAGCAACCCTCTATTGTGTGCATCAAAGG</Hsp_qseq>
      <Hsp_hseq>TCATTATATAATACAGTAGCAACCCTCTATTGTGTGCATCAAAGG</Hsp_hseq>
      <Hsp_midline>|||||||||||||||||||||||||||||||||||||||||||||</Hsp_midline>
    </Hsp>
  </Hit_hsps>
</Hit>
</Iteration_hits>
  <Iteration_stat>
    <Statistics>
      <Statistics_db-num>1</Statistics_db-num>
      <Statistics_db-len>9719</Statistics_db-len>
      <Statistics_hsp-len>11</Statistics_hsp-len>
      <Statistics_eff-space>330072</Statistics_eff-space>
      <Statistics_kappa>0.46</Statistics_kappa>
      <Statistics_lambda>1.28</Statistics_lambda>
      <Statistics_entropy>0.85</Statistics_entropy>
    </Statistics>
  </Iteration_stat>
</Iteration>
</BlastOutput_iterations>
</BlastOutput>

Perl

#!/usr/bin/env perl
use strict;
use warnings;

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
sub blast {
    my $response = $ua->post(
        'http://indra.mullins.microbiol.washington.edu/masterblaster/blast',
        {
            @_,
            dust => 'no',
            max_target_seqs => 10,
        }
    );
    die "Request failed: ", $response->status_line
        unless $response->is_success;
    return $response->decoded_content;
}

my $xml = blast( db => 'HXB2', query => 'TCATTATATAATACAGTAGCAACCCTCTATTGTGTGCATCAAAGG' );
print $xml;