package Finance::GDAX::API::MarginTransfer; our $VERSION = '0.01'; use 5.20.0; use warnings; use Moose; use Finance::GDAX::API::TypeConstraints; use Finance::GDAX::API; use namespace::autoclean; extends 'Finance::GDAX::API'; has 'margin_profile_id' => (is => 'rw', isa => 'Str', ); has 'type' => (is => 'rw', isa => 'MarginTransferType', ); has 'amount' => (is => 'rw', isa => 'PositiveNum', ); has 'currency' => (is => 'rw', isa => 'Str', ); sub initiate { my $self = shift; unless ($self->margin_profile_id && $self->type && $self->amount && $self->currency) { die 'Margin transfers need all attributes set'; } $self->path('/profiles/margin-transfer'); $self->method('POST'); $self->body({ amount => $self->amount, currency => $self->currency, type => $self->type, margin_profile_id => $self->margin_profile_id, }); return $self->send; } __PACKAGE__->meta->make_immutable; 1; =head1 NAME Finance::GDAX::API::MarginTransfer - Transfer funds between margin and standard GDAX profiles =head1 SYNOPSIS use Finance::GDAX::API::MarginTransfer; $xfer = Finance::GDAX::API::MarginTransfer->new( type => 'withdrawl', currency => 'USD', amount => '250.00'); $xfer->margin_profile_id('kwji-wefwe-ewrgeurg-wef'); $response = $xfer->initiate; =head2 DESCRIPTION Used to transfer funds between the GDAX standard/default profile and the margin account. All attributes are required to be set before calling the "initiate" method. From the GDAX API: =over Transfer funds between your standard/default profile and a margin profile. A deposit will transfer funds from the default profile into the margin profile. A withdraw will transfer funds from the margin profile to the default profile. Withdraws will fail if they would set your margin ratio below the initial margin ratio requirement. =back =head1 ATTRIBUTES =head2 C $string The id of the margin profile you'd like to deposit to or withdraw from. =head2 C $margin_transfer_type "deposit" or "withdraw". Deposit transfers out from the default profile, into the margin profile. Withdraw transfers out of the margin account and into the default profile. =head2 C $number The amount to be transferred. =head2 C $currency_string The currency of the amount -- for example "USD". =head1 METHODS =head2 C All attributed must be set before calling this method. The return value is a hash that will describe the result of the transfer. From the current GDAX API documentation, this is how that returned hash is keyed: { "created_at": "2017-01-25T19:06:23.415126Z", "id": "80bc6b74-8b1f-4c60-a089-c61f9810d4ab", "user_id": "521c20b3d4ab09621f000011", "profile_id": "cda95996-ac59-45a3-a42e-30daeb061867", "margin_profile_id": "45fa9e3b-00ba-4631-b907-8a98cbdf21be", "type": "deposit", "amount": "2", "currency": "USD", "account_id": "23035fc7-0707-4b59-b0d2-95d0c035f8f5", "margin_account_id": "e1d9862c-a259-4e83-96cd-376352a9d24d", "margin_product_id": "BTC-USD", "status": "completed", "nonce": 25 } =cut =head1 AUTHOR Mark Rushing =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Home Grown Systems, SPC. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut