Reference: https://porkbun.com/api/json/v3/documentation

This is currently only a partial implementation to suit my own needs. If you need a specific call to be implemented, let me know, or submit a PR


gem install porkbun


record = Porkbun::DNS.create(name: 'test',
  type: 'A',
  content: '',
  ttl: 300



Make sure your keys are good.

Porkbun::DNS.retrieve(domain, id)

Retrive all or specific record for a domain


Create record for a domain


  • name - name of record. example www
  • type - record type. example: CNAME
  • content - content of record. example '',
  • ttl - time to live. example: 600. porkbun seems to have this as a minimum
  • prio - record priority. mainly for MX records. example 10.

returns instance of DNS which can be used to delete


The gem also comes with a CLI

$ porkbun
  porkbun delete_all <domain>              # deletes all records for a domain. this is destructive. use with caution
  porkbun dyndns <hostname.domain> [<ip>]  # Update a dynamic dns record. example: porkbun dyndns home.example.com
  porkbun help [COMMAND]                   # Describe available commands or one specific command
  porkbun import <file>                    # Import BIND zone file
  porkbun list                             # List all domains
  porkbun retrieve <domain> [<id>]         # List all records for a domain


After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.


Bug reports and pull requests are welcome on GitHub at https://github.com/danielb2/porkbun-ruby.