The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

WebService::Bonusly - A handy library for accessing the Bonus.ly API

VERSION

version 1.001

SYNOPSIS

    use WebService::Bonusly;
    my $bonusly = WebService::Bonusly->new( token => $token );
        
    $res = $bonusly->authentication->sessions(
        email => '...',
        password => '...',
    );
        
    $res = $bonusly->bonuses->get( id => '...' );
    $res = $bonusly->bonuses->give( reason => '...' );
    $res = $bonusly->bonuses->list;
        
    $res = $bonusly->companies->show;
    $res = $bonusly->companies->update;
        
    $res = $bonusly->leaderboards->standouts;
        
    $res = $bonusly->redemptions->get( id => '...' );
        
    $res = $bonusly->rewards->get( id => '...' );
    $res = $bonusly->rewards->list;
        
    $res = $bonusly->users->add(
        email => '...',
        first_name => '...',
        last_name => '...',
    );
    $res = $bonusly->users->autocomplete( search => '...' );
    $res = $bonusly->users->bonuses( id => '...' );
    $res = $bonusly->users->create_redemption(
        id => '...',
        denomination_id => '...',
    );
    $res = $bonusly->users->delete( id => '...' );
    $res = $bonusly->users->get( id => '...' );
    $res = $bonusly->users->list;
    $res = $bonusly->users->me;
    $res = $bonusly->users->neighborhood( id => '...' );
    $res = $bonusly->users->redemptions( id => '...' );
    $res = $bonusly->users->update( id => '...' );
        
    $res = $bonusly->values->get( id => '...' );
    $res = $bonusly->values->list;

DESCRIPTION

This is a fairly simple library for performing actions with the Bonus.ly API.

ERRORS

Normally bonusly will return { success => 0, message => $reason } when there are errors, but on the off chance that something went really wrong, WebService::Bonusly will synthesize a data structure like this:

 {
     success => 0,
     message => 'Not Found',
     status => 404,
     content => "<html>...",
     response_object => HTTP::Response->new(...),
 }

When handling errors, you may want to consider checking if there is a response_object and logging its contents somewhere.

ATTRIBUTES

token

This is the access token to use to perform actions with.

debug

This is a boolean flag that, when set to true, causes messages to be printed to STDERR about what is being sent to and received from bonus.ly.

This is done through calls to the print_debug method.

authentication

This provides methods for accessing the Authentication aspects of the API. This provides the following methods:

sessions

    $res = $bonusly->authentication->sessions(%params);

Performs a POST against /api/v1/sessions at bonus.ly.

Required Parameters: email, password

bonuses

This provides methods for accessing the Bonuses aspects of the API. This provides the following methods:

get

    $res = $bonusly->bonuses->get(%params);

Performs a GET against /api/v1/bonuses/:id at bonus.ly.

Required Parameters: id

give

    $res = $bonusly->bonuses->give(%params);

Performs a POST against /api/v1/bonuses at bonus.ly.

Required Parameters: reason

Optional Parameters: giver_email, parent_bonus_id, receiver_email, amount

list

    $res = $bonusly->bonuses->list(%params);

Performs a GET against /api/v1/bonuses at bonus.ly.

Optional Parameters: limit, skip, start_time, end_time, non_zero, top_level, giver_email, receiver_email, user_email, hashtag, include_children

companies

This provides methods for accessing the Companies aspects of the API. This provides the following methods:

show

    $res = $bonusly->companies->show;

Performs a GET against /api/v1/companies/show at bonus.ly.

update

    $res = $bonusly->companies->update(%params);

Performs a PUT against /api/v1/companies/update at bonus.ly.

Optional Parameters: name, custom_properties

The custom_properties parameter must be given a reference to a hash.

leaderboards

This provides methods for accessing the Leaderboards aspects of the API. This provides the following methods:

standouts

    $res = $bonusly->leaderboards->standouts(%params);

Performs a GET against /api/v1/analytics/standouts at bonus.ly.

Optional Parameters: role, value, limit, period, custom_property_name, custom_property_value

redemptions

This provides methods for accessing the Redemptions aspects of the API. This provides the following methods:

get

    $res = $bonusly->redemptions->get(%params);

Performs a GET against /api/v1/redemptions/:id at bonus.ly.

Required Parameters: id

rewards

This provides methods for accessing the Rewards aspects of the API. This provides the following methods:

get

    $res = $bonusly->rewards->get(%params);

Performs a GET against /api/v1/rewards/:id at bonus.ly.

Required Parameters: id

list

    $res = $bonusly->rewards->list(%params);

Performs a GET against /api/v1/rewards at bonus.ly.

Optional Parameters: catalog_country, request_country, personalize_for

users

This provides methods for accessing the Users aspects of the API. This provides the following methods:

add

    $res = $bonusly->users->add(%params);

Performs a POST against /api/v1/users at bonus.ly.

Required Parameters: email, first_name, last_name

Optional Parameters: custom_properties, user_mode, budget_boost, external_unique_id

The custom_properties parameter must be given a reference to a hash.

autocomplete

    $res = $bonusly->users->autocomplete(%params);

Performs a GET against /api/v1/users/autocomplete at bonus.ly.

Required Parameters: search

bonuses

    $res = $bonusly->users->bonuses(%params);

Performs a GET against /api/v1/users/:id/bonuses at bonus.ly.

Required Parameters: id

Optional Parameters: skip, start_time, hashtag, end_time, include_children, limit, role

create_redemption

    $res = $bonusly->users->create_redemption(%params);

Performs a POST against /api/v1/users/:id/redemptions at bonus.ly.

Required Parameters: id, denomination_id

delete

    $res = $bonusly->users->delete(%params);

Performs a DELETE against /api/v1/users/:id at bonus.ly.

Required Parameters: id

get

    $res = $bonusly->users->get(%params);

Performs a GET against /api/v1/users/:id at bonus.ly.

Required Parameters: id

list

    $res = $bonusly->users->list(%params);

Performs a GET against /api/v1/users at bonus.ly.

Optional Parameters: limit, skip, email, sort

me

    $res = $bonusly->users->me;

Performs a GET against /api/v1/users/me at bonus.ly.

neighborhood

    $res = $bonusly->users->neighborhood(%params);

Performs a GET against /api/v1/users/:id/neighborhood at bonus.ly.

Required Parameters: id

Optional Parameters: days

redemptions

    $res = $bonusly->users->redemptions(%params);

Performs a GET against /api/v1/users/:id/redemptions at bonus.ly.

Required Parameters: id

Optional Parameters: limit, skip

update

    $res = $bonusly->users->update(%params);

Performs a PUT against /api/v1/users/:id at bonus.ly.

Required Parameters: id

Optional Parameters: email, first_name, last_name, custom_properties, user_mode, budget_boost, external_unique_id

The custom_properties parameter must be given a reference to a hash.

values

This provides methods for accessing the Values aspects of the API. This provides the following methods:

get

    $res = $bonusly->values->get(%params);

Performs a GET against /api/v1/values/:id at bonus.ly.

Required Parameters: id

list

    $res = $bonusly->values->list;

Performs a GET against /api/v1/values at bonus.ly.

DEVELOPMENT

If you are interested in helping develop this library. Please check it out from github. See https://github.com/zostay/WebService-Bonusly. The library is automatically generated from a script named apigen.pl. To build the library you will need to install Dist::Zilla and run:

    dzil authordeps | cpanm
    dzil build

Instead of running the "dzil build" command you may also run:

    ./apigen.pl

The templates for generating the code are found in tmpl.

AUTHOR

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Qubling Software LLC.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.