Approve read

Description

Approves a read submitted for a project. This operation may be optional:

If the project was created requesting just one read (contest=0), this operation is completely optional. If you don't approve the read within 168 hours of being available, VoiceBunny will automatically change the status of the project to "disposed", change the status of the read to "tacitlyApproved" and pay the voice actor. You will own the copyright of the read.

If the project was created as a collaborative contest (contest=1), you must use this operation to inform VoiceBunny which voice actor is the winner. If you don't approve any of the reads received within 168 hours of the project reaching its lifetime, VoiceBunny will automatically change the status of the project to "disposed", change the status of the reads in status "reviewable" to status "ignored", and split the rewardAmount among all voice actors that submitted reads that got the status "ignored". You won't own the copyright of any of the reads.

If the project was created as a casting project, you must use this operation to inform VoiceBunny which voice actor is the winner.

This operation can only be executed by the owner of the project. Approving a read automatically changes the status of the project to "disposed" and triggers the payment to the voice actor.

Response example

{
  "reads":[
    {
      "id":"1",
      "talentID":false,
      "status":"approved",
      "project":"2",
      "urls":{
        "part001":{
          "default":"http:\/\/voicebunny.s3.amazonaws.com\/dev\/2_aa70601bd0c0c323872c2d81e93f369f.mp3?h=1",
          "original":"http:\/\/voicebunny.s3.amazonaws.com\/dev\/2_e8861ad42488c482426bc6ae59437b79.wav?h=1"
        }
      },
      "created":1327403069
    }
  ],
  "timestamp":1369259085
}
<?xml version="1.0" encoding="UTF-8"?>
<reads>
  <read>
    <id>1</id>
    <talentID>0</talentID>
    <status>approved</status>
    <project>2</project>
    <urls>
      <part001>
        <default>http://voicebunny.s3.amazonaws.com/dev/2_aa70601bd0c0c323872c2d81e93f369f.mp3?h=1</default>
        <original>http://voicebunny.s3.amazonaws.com/dev/2_e8861ad42488c482426bc6ae59437b79.wav?h=1</original>
      </part001>
    </urls>
    <created>1327403069</created>
  </read>
  <timestamp>1369259086</timestamp>
</reads>

Errors

  • 5013: You are not authorized to modify this project. Only the owner can modify it.
  • 5018: The ID in the url makes reference to a read that does not exist.
  • 5028: This read was already rejected.
  • 5029: This read was already approved.
  • 5067: The project is in status "disposed". You cannot approve or reject reads after the project has reached this status.
  • 5079: You cannot approve this read. You've already selected a winner for this project.

Code example

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2' )

import groovyx.net.http.*
import groovy.json.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

http = new HTTPBuilder('https://api.voicebunny.com')
http.handler.success = {response, json -> return json}
http.handler.failure = {response, json -> throw new RuntimeException(json.error.code + ' ' + json.error.message)}
def voicebunnyUser = 'xxXXxx'
def voicebunnyToken = 'xxxxXXXXxxxxXXXX'
def readId = 'x'
http.auth.basic voicebunnyUser, voicebunnyToken
def approvedRead = http.post(path: 'reads/approve/' + readId, requestContentType: URLENC)
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.Map.Entry;
import sun.misc.BASE64Encoder;

public class Voicebunny {

    private String user = "xxXXxx";

    private String token = "xxxxXXXXxxxxXXXX";

    private String encodedAuthorization = "";

    private String host = "https://api.voicebunny.com";

    public Voicebunny() {
        String userpassword = user + ":" + token;
        encodedAuthorization = new BASE64Encoder().encode(userpassword.getBytes());
    }

    public static void main(String[] args) throws IOException {
        Voicebunny vb = new Voicebunny();
        System.out.println(vb.approveRead("readId"));
    }

    private String approveRead(String id) throws UnsupportedEncodingException, MalformedURLException, ProtocolException, IOException {
        Map<String, String> params = new HashMap<String, String>();
        return post("reads/approve/" + id, params);
    }

    private String post(String resource, Map<String, String> params) throws UnsupportedEncodingException, MalformedURLException, IOException, ProtocolException {
        String data = "";
        for (Entry<String, String> entry : params.entrySet()) {
            if (!data.isEmpty()) {
                data += "&";
            }
            data += (URLEncoder.encode(entry.getKey(), "UTF-8") + "=" + URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        URL url = new URL(host + "/" + resource);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization);
        connection.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
        wr.write(data);
        wr.flush();
        InputStream in = connection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuffer sb = new StringBuffer();
        String line = "";
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        wr.close();
        reader.close();
        return sb.toString();
    }

}
<?php
$voicebunnyUser = 'xxXXxx';
$voicebunnyToken = 'xxxxXXXXxxxxXXXX';
$readId = 'x';
$url_api = 'https://api.voicebunny.com/reads/approve/' . $readId;
$postVars = array();
$vars = http_build_query($postVars);
$opts = array(
	CURLOPT_URL => $url_api,
	CURLOPT_RETURNTRANSFER => TRUE,
	CURLOPT_INFILESIZE => -1,
	CURLOPT_TIMEOUT => 60,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_POST => TRUE,
	CURLOPT_POSTFIELDS => $vars,
	CURLOPT_USERPWD => $voicebunnyUser . ':' . $voicebunnyToken,
);
$curl = curl_init();
curl_setopt_array($curl, $opts);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
print_r($response);
?>
import requests
import simplejson
from requests.auth import HTTPBasicAuth

url = 'https://api.voicebunny.com'
api_id = 'XX'
api_key = "xxxxXXXXxxxxXXXX"
read_id = 'XX'
req = requests.get(url+'/reads/approve/'+read_id,
    auth=HTTPBasicAuth(api_id, api_key),verify=False)
data = simplejson.loads(req.text)
response = data['reads']
require 'faraday'
require 'faraday_middleware'

@conn = nil
@api_id = "XX"
@api_key = "xxxxXXXXxxxxXXXX"
read_id = "X"
resp = nil

@conn = Faraday.new(:url =>("https://"+ @api_id+":"+@api_key +"@api.voicebunny.com"),:ssl => {:verify => false}) do |builder|
	builder.use Faraday::Request::Multipart
	builder.use Faraday::Request::UrlEncoded
	builder.use Faraday::Response::ParseJson
	builder.use Faraday::Adapter::NetHttp		  
end

resp = @conn.get '/projects/reads/approve/'+read_id+'.json'
resp.body