NAME

WWW::Namecheap::Domain - Namecheap API domain methods

SYNOPSIS

Namecheap API domain methods.

See WWW::Namecheap::API for main documentation.

use WWW::Namecheap::Domain;

my $domain = WWW::Namecheap::Domain->new(API => $api);
$domain->check(...);
$domain->create(...);
...

SUBROUTINES/METHODS

WWW::Namecheap::Domain->new(API => $api)

Instantiate a new Domain object for making domain-related API calls. Requires a WWW::Namecheap::API object.

$domain->check(Domains => ['example.com'])

Check a list of domains. Returns a hashref of availablity status with domain names as the keys and 0/1 as the values for not available/available.

my $result = $domain->check(Domains => [qw(
    example.com
    example2.com
    foobar.com
)]);

Will give a $result something like:

$result = {
    'example.com' => 0,  # example.com is taken
    'example2.com' => 1, # example2.com is available
    'foobar.com' => 0,   # damn, foobar.com is taken
};

$domain->create(%hash)

Register a new domain name.

Example:

my $result = $domain->create(
    UserName => 'username',    # optional if DefaultUser specified in $api
    ClientIp => '1.2.3.4',     # optional if DefaultIp specified in $api
    DomainName => 'example.com',
    Years => 1,                                # required; default is 2
    Registrant => {
        OrganizationName => 'Example Dot Com', # optional
        JobTitle => 'CTO',                     # optional
        FirstName => 'Domain',
        LastName => 'Manager',
        Address1 => '123 Fake Street',
        Address2 => 'Suite 555',               # optional
        City => 'Univille',
        StateProvince => 'SD',
        StateProvinceChoice => 'S',            # optional; 'S' for 'State' or 'P' for 'Province'
        PostalCode => '12345',
        Country => 'US',
        Phone => '+1.2025551212',
        PhoneExt => '4444',                    # optional
        Fax => '+1.2025551212',                # optional
        EmailAddress => 'foo@example.com',
    },
    Tech => {
        # same fields as Registrant
    },
    Admin => {
        # same fields as Registrant
    },
    AuxBilling => {
        # same fields as Registrant
    },
    Billing => {
        # Optional; fields as Registrant except OrganizationName, JobTitle
    },
    Nameservers => 'ns1.foo.com,ns2.bar.com', # optional
    AddFreeWhoisguard => 'yes',               # or 'no', default 'no'
    WGEnabled => 'yes',                       # or 'no', default 'no'
    PromotionCode => 'some-string',           # optional
    IdnCode => '',                            # optional, see Namecheap API doc
    'Extended attributes' => '',              # optional, see Namecheap API doc
    IsPremiumDomain => '',                    # optional, see Namecheap API doc
    PremiumPrice => '',                       # optional, see Namecheap API doc
    EapFreee => '',                           # optional, see Namecheap API doc
);

Unspecified contacts will be automatically copied from Registrant, which must be provided.

Returns:

$result = {
    Domain => 'example.com',
    DomainID => '12345',
    Registered => 'true',
    OrderID => '12345',
    TransactionID => '12345',
    ChargedAmount => '10.45', # dollars and cents
};

$domain->getinfo(DomainName => 'example.com')

Returns a hashref containing information about the requested domain.

$domain->list(%hash)

Get a list of domains in your account. Automatically handles the Namecheap "paging" to get a full list. May be optionally restricted:

my $domains = $domain->list(
    ListType => 'ALL', # or EXPIRING or EXPIRED
    SearchTerm => 'foo', # keyword search
    SortBy => 'NAME', # or EXPIREDATE, CREATEDATE, or *_DESC
);

Returns an arrayref of hashrefs:

$domains = [
    {
        ID => '123',
        Name => 'example.com',
        User => 'owner',
        Created => 'MM/DD/YYYY',
        Expires => 'MM/DD/YYYY',
        IsExpired => 'false',
        IsLocked => 'true',
        AutoRenew => 'false',
        WhoisGuard => 'ENABLED',
    },
    ...
];

$domain->getcontacts(DomainName => 'example.com')

Get the contacts on file for the provided DomainName. Returns a big ol' data structure:

$contacts = {
    Domain => 'example.com',
    domainnameid => '12345',
    Registrant => {
        ReadOnly => 'false',
        ... all contact fields from create ...
    },
    Tech => {
        ... ditto ...
    },
    Admin => {
        ... ditto ...
    },
    AuxBilling => {
        ... ditto ...
    },
    WhoisGuardContact => {
        ... same contacts as outside, except the actual published
            WhoisGuard info, ReadOnly => 'true' ...
    },
};

$domain->setcontacts(%hash)

Set contacts for a domain name.

Example:

my $result = $domain->create(
    UserName => 'username', # optional if DefaultUser specified in $api
    ClientIp => '1.2.3.4', # optional if DefaultIp specified in $api
    DomainName => 'example.com',
    Registrant => {
        OrganizationName => 'Example Dot Com', # optional
        FirstName => 'Domain',
        LastName => 'Manager',
        Address1 => '123 Fake Street',
        Address2 => 'Suite 555', # optional
        City => 'Univille',
        StateProvince => 'SD',
        StateProvinceChoice => 'S', # for 'State' or 'P' for 'Province'
        PostalCode => '12345',
        Country => 'USA',
        Phone => '+1.2025551212',
        Fax => '+1.2025551212', # optional
        EmailAddress => 'foo@example.com',
    },
    Tech => {
        # same fields as Registrant
    },
    Admin => {
        # same fields as Registrant
    },
    AuxBilling => {
        # same fields as Registrant
    },
);

Unspecified contacts will be automatically copied from the registrant, which must be provided.

$result is a small hashref confirming back the domain that was modified and whether the operation was successful or not:

$result = {
    Domain => 'example.com',
    IsSuccess => 'true',
};

$domain->gettldlist()

Get a list of all TLDs available for registration, along with various attributes for each TLD. Results are automatically cached for one hour to avoid excessive API load.

$domain->transfer(%hash)

Initiate a transfer in request to Namecheap from another registrar. Request should look something like:

my $transfer = $domain->transfer(
    DomainName => 'example.com',
    Years => 1,
    EPPCode => 'foobarbaz',
);

The response will be a hashref:

$transfer = {
    Transfer => 'true',
    TransferID => '15',
    StatusID => '-1',
    OrderID => '1234',
    TransactionID => '1234',
    ChargedAmount => '10.10',
};

For transfer status code details, see the Namecheap API documentation:

https://www.namecheap.com/support/api/domains-transfer/transfer-statuses.aspx

$domain->transferstatus(TransferID => '1234')

Check the current status of a particular transfer. The TransferID is the TransferID returned by the transfer() call, or included in the transferlist(). Returns a hashref:

$result = {
    TransferID => '1234',
    Status => 'String',
    StatusID => '-1',
};

$domain->transferlist()

Retrieve a list of transfers associated with the connected API account. Automatically handles the Namecheap "paging" to get a full list. May be optionally restricted:

my $transfers = $domain->transferlist(
    ListType => 'ALL', # or INPROGRESS, CANCELLED, COMPLETED
    SearchTerm => 'foo', # keyword search
    SortBy => 'DOMAINNAME', # or TRANSFERDATE, STATUSDATE, *_DESC
);

Returns an arrayref of hashrefs:

$domains = [
    {
        ID => '123',
        DomainName => 'example.com',
        User => 'apiuser',
        TransferDate => 'MM/DD/YYYY',
        OrderID => 12345,
        StatusID => 20
        Status => 'Cancelled',
        StatusDate => 'MM/DD/YYYY',
        StatusDescription => 'String',
    }
    ...
];

$domain->api()

Accessor for internal API object.

AUTHOR

Tim Wilde, <twilde at cpan.org>

BUGS

Please report any bugs or feature requests to bug-www-namecheap-api at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WWW-Namecheap-API. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc WWW::Namecheap::Domain

You can also look for information at:

ACKNOWLEDGEMENTS

LICENSE AND COPYRIGHT

Copyright 2011 Tim Wilde.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.