#!/usr/bin/env perl use strictures; use HTTP::Request::Common; use JSON; use URI; my $endpoint = URI->new("https://www.googleapis.com/batch"); my %writer = ( emailAddress => 'example@appsrocks.com', role => "writer", type => "user" ); my %domain = ( reader => "appsrocks.com", role => "reader", type => "domain" ); my $request1 = POST "https://some.uri/you/must/construct", Authorization => "Bearer MOOOOOOOKEN", Content_Type => "application/json; charset=UTF-8", Content => encode_json(\%writer); my $request2 = POST "https://some.uri/you/must/also/construct", Authorization => "Bearer MOOOOOOOKEN", Content_Type => "application/json; charset=UTF-8", Content => encode_json(\%domain); my $top = POST $endpoint, Accept => "gzip", User_Agent => "YourMomsCooking/0.00001"; $top->add_part( $request1, $request2 ); # Here, you would pass the request to a WWW::Mechanize object or somesuch. print $top->as_string;