POST /v1/images HTTP/1.1
Host: api.clayful.io
Accept: application/json
Accept-Encoding: gzip
Content-Type: multipart/form-data; boundary=----formDataBoundary
Authorization: Bearer <api-access-token>

------formDataBoundary
Content-Disposition: form-data; name="model"

Review
------formDataBoundary
Content-Disposition: form-data; name="application"

images
------formDataBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg

(binary)
------formDataBoundary--
/*
    <!-- HTML Form -->
    <form id="example-form" name="example">
        <input type="hidden" name="model" value="Review">
        <input type="hidden" name="application" value="images">
        <input type="file" name="file">
    </form>
*/

// Example#1: Using FormData (IE 10<=)
var Image = Clayful.Image;

var form = new FormData(
    document.getElementById('#example-form')
);

var options = {
    customer: '<customer-auth-token>'
};

Image.createForMe(form, options, function(err, result) {

    if (err) {
        // Error case
        console.log(err.code);
    }

    var data = result.data;

    console.log(data);

});

// Example#2: Using jquery.form (IE 9>=)
$('#example-form').ajaxSubmit({
    method:  'POST',
    url:     'https://api.clayful.io/v1/me/images',
    headers: {
        'Authorization': 'Bearer <api-access-token>',
        'Authorization-Customer': '<customer-auth-token>'
    },
    success: function(data) {
        console.log(data);
    },
    error: function(jqXHR) {
        // Error case
        console.log(jqXHR.responseJSON.message)
    }
});
const fs = require('fs');
const FormData = require('form-data');

const Image = Clayful.Image;

const form = new FormData();

form.append('model', 'Review');
form.append('application', 'images');
form.append('file', fs.createReadStream('./path/to/image.jpg'));

Image.create(form, (err, res) => {	

    if (err) {
        // Error case
        console.log(err.code);
    }

    const data = result.data;

    console.log(data);

});
use Clayful\Image;

$payload = array(
    array(
        'name'     => 'model',
        'contents' => 'Review',
    ),
    array(
        'name'     => 'application',
        'contents' => 'images',
    ),
    array(
        'name'     => 'file',
        'contents' => fopen('./path/to/image.jpg', 'rb')
    )
);

$response = Image::create($payload);

print_r($response->data);
Image = Clayful.Image

payload = {
    'model': (None, 'Review'),
    'application': (None, 'images'),
    'file': (
        'image.jpg',
        open('./path/to/image.jpg', 'rb'),
        'image/jpeg'
    )
}

response = Image.create(payload)

print(response.data)
Image = Clayful::Image

payload = {
    'model'       => 'Review',
    'application' => 'images',
    'file'        => File.new('./path/to/image.jpg', 'rb')
}

response = Image.create(payload)

puts response.data