Latest updates from the Linode team

4.4.0: 2019-09-09



  • The group property of the Managed Contacts (/managed/contacts) resource is no longer deprecated.
  • The consultation_group property of the Managed Services (/managed/services) resource is no longer deprecated.


  • Previously, you could initiate a cross data center (DC) migration (POST /linode/instances/{linodeId}/migrate) even if the Linode already had a pending migration in the queue. Now, if your Linode has a pending migration already queued, you will not be able to initiate a DC migration until it has completed and you will receive an error response, "Linode has a pending migration." A list of pending migrations, if any, can be accessed from GET /account/notifications.

  • Validation to ensure a running Linode is powered down prior to initiating a cross data center (DC) migration (POST /linode/instances/{linodeId}/migrate) was removed. This validation is unnecessary because a Linode is automatically powered off, migrated, and then restored to its previous boot state when any Linode migration is initiated.

  • The group property of a managed contacts resource can now be updated (PUT /managed/contacts/{contactId}) with a null value. Previous PUT validation generated an error when the group property was updated with a null value.

  • When updating (PUT /linode/stackscripts/{stackscriptId}) a StackScripts resource, the images property no longer accepts an empty array. Previously, there was no validation in place to prevent an empty images property array. This caused a StackScript to no longer be deployable.

  • When listing Managed Services (GET /managed/services) on a managed account, removed services no longer appear in the response data.

  • A Managed Credential now correctly maps to a Managed Service. Previously, when you created (POST /managed/services) or updated (PUT /managed/services/{serviceId}) a Managed Service with a credentials parameter, its Managed Credential Ids did not appropriately map to the service. This resulted in an empty credentials array when listing (GET /managed/services) or viewing (GET /managed/services/{serviceId}) a Managed Service.


4.3.2: 2019-08-26



  • The maximum credit card payment that can be made with the Make Payment (POST /account/payments) endpoint is $50,000. This value has not changed, but previously this endpoint would return an HTTP 500 error for payments over this amount. If a payment is attempted with this endpoint that exceeds this limit, an HTTP 400 error with a descriptive error message will now be returned.

  • The number of concurrent clone operations for any given Linode is now limited to five clones. If a call to the Clone Linode (POST /linode/instances/{linodeId}/clone) endpoint would result in a sixth concurrent clone of a Linode, then the endpoint will return an HTTP 400 error with a descriptive error message.


  • Previously, the access boolean of the ssh property of a Linode's Managed Settings would display true whenever Managed SSH access was disabled for the Linode, and false when it was enabled, contrary to the naming of the property. This property is returned by the List Managed Linode Settings (GET /managed/linode-settings) and View Linode's Managed Settings (GET /managed/linode-settings/{linodeId}) endpoints. This property will now correctly display true when Managed SSH access is enabled and false when Managed SSH access is disabled.

    Similarly, setting this property to true via the Update Linode's Managed Settings (PUT /managed/linode-settings/{linodeId}) endpoint would result in Managed SSH access for the Linode being disabled, and setting it to false would result in Managed SSH access being enabled. This behavior is now reversed to align with the naming of the property.


4.3.1: 2019-08-14


  • Added the activepromotions_ property to Accounts, as returned by the View Account (GET /account)) endpoint. This property lists all active promotions on your account.

    Promotions generally offer a set amount of credit that can be used toward your Linode services, and the promotion expires after a specified date. Simply put, a monthly cap on the promotional offer is set. In other words, a promotion offers a certain amount of credit every month, until either the expiration date is passed, or until the total promotional credit is used, whichever comes first.

  • Added promotion to the types of Notifications that can be returned by the List Notifications (GET /account/notifications) endpoint.


4.3.0: 2019-08-12


  • Added a new View Managed SSH Key (GET /managed/credentials/sshkey) endpoint. This endpoint returns the unique SSH public key assigned to your Linode account's Managed service. If you add this public key to a Linode on your account, Linode special forces will be able to log in to the Linode with this key when attempting to resolve issues.

  • Added additional filtering for Events. Events returned by the the List Events (GET /account/events) endpoint can be filtered by an Event entity's id and type.

    There are a few edge cases when filtering Events by entity ID:

    • Some Event entities do not have IDs associated with them, so they will not be returned when filtering by ID. These include the various account and profile Events.

    • Entities for some Events are assigned the ID of the Linode they correspond to. When filtering by ID for these Events, use the corresponding Linode's ID. These include the disk and backups Events.

    • Tag Events use a tag's name for the entity ID field. When filtering by ID for tag Events, supply the name of the tag.


  • Domain labels can no longer exceed 63 characters. The regular expression that validates new labels has been updated to conform to RFC1035.

  • Default CPU alert thresholds for the Create Linode (POST /linode/instances) endpoint have been updated. Previously, the default threshold was always set to 90%, regardless of which plan was chosen. This default has been increased to 90% multiplied by the number of cores for a Linode's plan.

    This increase was made because a Linode's total CPU capacity is represented as 100%, multiplied by its number of cores. For example, a two core Linode's CPU capacity is represented as 200%. Therefore, an alert that triggers at 90% of a two core Linode's CPU capacity should be set to 180%.


  • Complex filtering for region labels was not returning expected results, and this has been fixed.

4.2.4: 2019-07-29



  • The Execute Staged/Approved PayPal Payment (POST /account/payments/paypal/execute) endpoint will return a more helpful error message whenever PayPal's services are temporarily unavailable.

  • The entity field for an ipaddress_update event is now populated; it was previously null. Events are returned by the List Events (GET /account/events) and View Event (GET /account/events/:event_id) endpoints.

  • The entity field for an account_update event is now populated; it was previously null. Events are returned by the List Events (GET /account/events) and View Event (GET /account/events/:event_id) endpoints.

  • Calling the Update Profile endpoint (PUT /profile) without specifying an email in your request could previously trigger a notification email. This notification's message stated that your email address had been updated, even though it was not changed. This will no longer occur.

  • Previously, if the Create Disk (POST /linode/instances/:linode_id/disks) or Create Linode (POST /linode/instances) endpoints were called with a custom image and with a list for the authorized_users field, then those authorized users' keys were not configured for the root user of the new disk or Linode. Those keys will now be properly configured on the provisioned disk.


4.2.3: 2019-07-15



  • Changed behavior of the configs parameter for the POST /linode/instances/{linodeId}/clone endpoint. When an empty array is passed to the configs parameter, no configuration profiles will be cloned from the source Linode.

    Previously, all configuration profiles would be cloned. All behaviors of the disks and configs parameters for this endpoint are now more extensively documented in the API reference.


  • When updating the email of an account (PUT /account) or of a user (PUT /profile), Linode will now send an email notification to the previous email address that describes this change.

  • Fixed an issue where a user could not set permissions on a domain that contained errors.

  • Fixed a malformed URL in the response for the Enable Managed Service endpoint (POST /managed/services/{serviceId}/enable).

  • Fixed an issue in which SRV records could only be assigned a port number below 32767. Any port number is now accepted.

  • Fixed a login error that could appear after a user's session had expired, if the user also had two-factor authentication enabled.

  • Reduced response time for the GET /support/tickets endpoint.


4.2.2: 2019-07-01



  • Fixed an issue that caused backup windows to display improperly.

4.2.0: 2019-06-25



4.1.0: 2019-06-17



  • Fixed failing validation for Internationalized Domain Names (IDN).
  • When using the the View Linode endpoint (GET /linode/instances/{linodeId}) Linodes that have not been assigned an IPv6 address will have their JSON correctly display null.

4.0.25: 2019-06-10



4.0.24: 2019-06-03




4.0.23: 2019-05-20



  • Changed validation criteria when updating (PUT /linode/instances/{linodeId}/configs/{configId}) the devices property for a Linode's configuration profile.

    • An empty devices object or a devices object with empty values for device slots is allowed on PUT only if an empty device map already exits. An error will result if a non-empty device map exists for the Linode's configuration profile.
    • If no devices are specified, booting from this configuration will hold waiting for a device to exist before being able to boot.
    • Previous validation produced an error in all cases when an empty device object or a devices object with empty values for device slots was passed on PUT.
  • Changed validation criteria and behavior when creating (POST /linode/instances/{linodeId}/configs) and updating (PUT /linode/instances/{linodeId}/configs/{configId})the root_device property for a Linode's configuration profile.

    • If no value or an invalid value is provided, root_device will default to /dev/sda.
    • Previous validation for PUT errored when no value was provided for root_device and an empty device map existed for the Linode's configuration profile.
    • If the device specified at the root device location is not mounted, the Linode will not boot until a device is mounted.


  • page query string parameter no longer errors on large page number values. If the value of page exceeds 2^64/page_size, the last possible page will be returned.
  • swap_size property no longer enforces a max limit when creating a Linode (POST /linode/instances).
  • account:read_only scope is now enforced when listing Account notifications (GET /account/notifications).
  • Fix pagination metadata when listing Volumes (GET /volumes) for accounts that have 100+ Volumes.

4.0.22: 2019-04-29


  • Added validation on the root_device property when creating (POST /linode/instances/{linodeId}/configs) or updating (PUT /linode/instances/{linodeId}/configs/{configId}) a Linode's configuration profile.
  • Creating an SRV domain record (POST /domains/{domainId}/records) no longer adds an additional extension to the name property.
  • A cloned (POST /domains/{domainId}/clone) MX or SRV Domain record no longer return an incorrect value for the target property (GET /domains/123/records) when the record contains a subdomain.
  • Deprecated data centers are no longer returned from the regions endpoint (GET /regions).

    • Deprecated data centers include Tokyo1 ("id": "ap-northeast-1a", "country": "jp").
  • Viewing (GET /account) and updating your account (PUT /account) now returns a consistent value for the credit_card object's expiry property.
  • More explicit error messages are returned when creating a NodeBalancer (POST /nodebalancers), creating a NodeBalancer node (POST /nodebalancers/{nodeBalancerId}/configs/{configId}/nodes), updating a NodeBalancer node (PUT /nodebalancers/{nodeBalancerId}/configs/{configId}/nodes/{nodeId}) and an invalid node IP address is provided.

4.0.21: 2019-04-22


  • Added taxes to invoices and invoice items.

    • Added the subtotal and tax properties to invoices (GET /account/invoices/{invoiceId})
    • The total property of an invoice now represents the total of the invoice after taxes.
    • Added the tax and total properties to invoice items (GET /account/invoices/{invoiceId}/items).
    • An invoice item's total is the item's amount plus the taxes levied on the item.
  • The Events endpoints (GET /account/events, GET /account/events/{eventId}) will now include Lassie reboots and reboots of a Linode's host.


  • Reverted ability to filter StackScripts by image (introduced in release 4.0.19).
  • Resizing (POST /linode/instances/{linodeId}/resize) or upgrading (POST /linode/instances/{linodeId}/mutate) a Linode will now throw an error if there is no availability in the Linode's data center.
  • The backups_enabled property of a Linode will now return true if a Linode's backups are temporarily paused by the Linode Support Team.
  • Assigning a new credit card to an account (POST /account/credit-card) when the account has an expired credit card on file will no longer return an error.

4.0.20: 2019-04-08


  • Added a "reserved" section to the GET /linodes/instances/:id/ips endpoint that lists reserved IPs.
  • Added sequence and logo_url to StackScripts.


  • Correctly resize disks created with a private image.

4.0.19: 2019-03-28


  • Add filtering for StackScripts by image.

    • /stackscripts now accepts X-Filter for images.
  • Increased PayPal max payments amount to $500 USD or credit card limit; whichever value is higher.

    • POST /account/payments/paypal enforces max amount for usd field.


  • Allow filtering on region by slug and slug alias.

    • /instances accepts X-Filter for region using data center slug or slug alias.
  • Support ticket description and replies cannot contain only whitespace or newlines.

    • POST /support/tickets and /support/tickets/:id/replies disallow description field to contain only whitespace or new lines.

4.0.18: 2019-03-11


  • Updated POST /account/payments/paypal

    • adds checkout_token to the response
  • Updated GET /profile

    • adds active_since date
    • adds balance_uninvoiced amount


  • GET profile/apps no longer returns internal client tokens

4.0.17: 2019-02-27


  • Adds Region Features:

    • Adds features to the Region object. features is a list of strings describing what a region supports.
  • Adds events for the following actions:

    • Domain update, domain record update
    • Image update
    • Linode update, disk update
    • StackScript update
    • Longview client update
    • NodeBalancer update, nodebalancer config update
    • ssh key update
    • Volume update
    • Linode config create, update, delete


  • Tag Validation expanded to 50 characters to accommodate display groups.

4.0.16: 2019-02-21


  • Host API docs from within to unify navigation/header.
  • Replace external Markdown links in the API spec with anchor tags.

4.0.15: 2019-02-11


  • Allow up to 50 characters for Tag labels
  • Removed restriction preventing resize across plan generations
  • Add filtering for entity type and id on Events

    • /account/events now accepts X-Filter for entity.type and
    • If filtering by, entity.type is also required
    • Allowed types are: linode, nodebalancer, domain, volume


  • Allow issuing console tokens for IPv6 clients

4.0.14: 2019-02-05


  • Documentation for Dedicated CPU class ("dedicated") in Linode Types

4.0.13: 2019-01-21


  • Mismatched labels/descriptions for fields in API schemas

4.0.12: 2019-01-21


  • Trusted Devices

    • Lists devices with active Remember Me sessions on the account for the past 30 days, device name and browser used.

4.0.11: 2018-12-17


  • community_like Event type
  • Include prefix_length in ipv6 global pools response


  • Consistent ordering of Linode IPv4s

    • Public addresses come before private addresses, order is always the same
  • New Users are assigned a referral code

4.0.10: 2018-12-03


  • Added 'tags' to NodeBalancers

    • The NodeBalancer object now includes "tags", an array of string
    • POST /nodebalancers now accepts "tags", an array of strings
    • GET /tags/:tag now returns tagged NodeBalancers in addition to other types

4.0.9: 2018-11-19


  • Updates tag endpoints to accept and return Volumes

    • GET /tags
    • POST /tags
  • Added tags to Volumes


  • Fixed validating RDNS when set via /networking endpoint

4.0.8: 2018-11-05


  • Added 'tags' to Domains

    • The Domain object now includes "tags", an array of strings
    • POST /domains now accepts "tags", an array of strings
    • GET /tags/:tag now returns tagged Domains in addition to Linodes

4.0.7: 2018-10-24


  • Added "migration_imminent" notification for Linodes that will migrate soon
  • POST /linode/instances/:id/migrate can now initiate scheduled migrations


  • Fixed bad interaction between clone and global backups_enabled that resulted in failed clone

4.0.6: 2018-09-24


  • Added closeable support tickets via /support/tickets/:id/close

    • Only applies to tickets that are closeable

4.0.5: 2018-09-10


  • Added backups-enabled to /account/settings to automatically add backups service for new Linodes.
  • Added tags for Linodes
  • Added linode/types-legacy collection, returning all Linode types that cannot be deployed.
  • Added successor field to Linode Type object.


  • Fixed issue with backup windows when a window could not be determined.
  • Fixed bug related to reattaching volumes to another Linode when the original Linode is deleted.

4.0.4: 2018-08-28


  • Added User SSH Keys

    • Allows storage and deployment of public SSH Keys
    • Added GET /profile/sshkeys
    • Added POST /profile/sshkeys
    • Added GET /profile/sshkeys/{ssh_key_id}
    • Added PUT /profile/sshkeys/{ssh_key_id}
    • Added DELETE /profile/sshkeys/{ssh_key_id}
    • Added SSH Key labels to User object
  • Allow deploying Linodes with stored SSH Keys

    • Added authorized\_users to POST /linodes/instances/
  • Allow rebuilding Linodes with stored SSH Keys

    • Added authorized\_users to POST /linodes/instances/{linode_id}/rebuild
  • Allow deploying Disks with stored SSH Keys

    • Added authorized\_users to POST /linodes/instances/{linode_id}/disks
  • NodeBalancer config rebuild

    • Allows fast track config/node rebuilding
    • POST nodebalancers/{nodebalancerId}/configs/{configId}/rebuild
  • Add expires to Image map for automatic Images


  • Removed duplicative Event for StackScript creation
  • Fixed typo in DNS error message
  • Added 'field' to StackScript errors

4.0.3: 2018-07-12


  • Added POST /linode/instances/{linodeId}/migrate

    • In some circumstances, a Linode may have pending migrations scheduled that that you can initiate when convenient.
    • This endpoint initiates the scheduled migration, which will shut the Linode down, migrate it, and then bring it back to its original state.
  • Added POST /domains/import

    • Imports a domain zone from a remote nameserver that allows zone transfers (AXFR).
  • Added ability to create a Linode with private networking enabled.

    • POST /linode/instances now accepts a boolean "private_ip".
    • If true, the created Linode will have private networking enabled when created.
  • Added optional "config_id" to POST /linode/instances/{linodeId}/reboot


  • Fixed example response for POST /volumes/{volumeId}/attach

4.0.2: 2018-06-20


  • Added fast-track NodeBalancer creation

    • POST /nodebalancers now accepts "configs", details of configs to create
    • Each config in "configs" must have at least one node in "nodes"
  • Added X-Spec-Version header to API responses

  • Added persistent ordering to all collections

    • All collections are now returned in a predictable, consistent order
  • Added watchdog_enabled to Linode object
  • Added X-Spec-Version header to all responses

    • This header describes the version of our OpenAPI spec that describes this API


  • Require shutting down before resetting root password for a disk
  • Fixed url for Community events

4.0.1: 2018-05-14


Added missing "resizing" Linode status.


  • Fixed bug where Linodes got stuck in rescue mode.
  • Fixed bug when attaching a Volume to a Linode with no configs.
  • API now returns 500 when an IP Address cannot be allocated.

    • Previously, this incorrectly returned a 400.
  • Fixed 500 on POST /domains/:id/records with service.

    • Bug occurred when service was sent into this endpoint without "type": "SRV".
  • Fixed errors caused by illegal characters in URL errors.

4.0.0: 2018-04-02


  • Added fields to Notification object

    • Added "label" - a brief description of the notification
    • Added "severity" - one of "minor", "major", or "critical"
    • Added "until" - a datetime or null
    • Added "notice" to possible values for "type"
  • Added POST /linode/instances/:id/disks/:id/clone

    • This used to be at POST /linode/instances/:id/disks/:id
  • GET /linode/instances is now filterable on "id"
  • GET /account/events is now filterable on "id"


  • Unify IPv4, IPv6 GET/POST; use "type": "public"

  • Moved /managed/linode_settings to /managed/linode-settings

    • /managed/linode_settings/:id moved to /managed/linode-settings/:id
    • This was to keep our convention of using dashes in URLs instead of underscores
  • Password no longer accepted in POST /account/users

    • You may no longer provide a password when creating a new user
    • New users will immediately receive a password reset email to set their password
  • Changed returned Region IDs

    • Slugs such as "us-east-1a" are now returned as "us-east"
    • These values had previosuly been accepted as input.
    • "us-south" was renamed "us-central"
    • Old values are still accepted (and translated) in requests
  • Moved GET/PUT for range/pool v6 addresses to /networking/ips

    • GET /networking/ipv6/:address moved to GET /networking/ips/:address
    • PUT /networking/ipv6/:address moved to GET /networking/ips/:address
  • /linode/instances/$id/rebuild returns a Linode

  • Fixed inconsistent responses for action endpoints

    • POST /linode/instances/:id/backups-enable now returns {} on success
    • POST /linode/instances/:id/backups-disable now returns {} on success
  • Creating a payment now returns the new payment

    • POST /account/payments now returns a Payment object
    • POST /account/payments/paypal/execute now returns a Payment object
  • Moved ipv4-specific networking endpoints

    • POST /networking/ip-assign moved to POST /networking/ipv4/assign
    • POST /networking/ip-sharing moved to POST /networking/ipv4/share
    • POST /networking/ipv4/assign now returns {} on success


  • Removed "addresses" from GET /linode/instances/:id/ips response

    • These addresses are now returned in GET /networking/ips
  • Removed the ability to change another user's email address

    • PUT /account/users/:username no longer accepts "email"
    • PUT /profile can still be used to change your own email address



  • Added support for refresh tokens

    • Apps with an active refresh token are returned in GET /profile/apps
    • Revoking an app's access to your account expires any refresh tokens it has


  • Removed the ability to change passwords

    • Removed POST /profile/password
    • Removed POST /account/users/:username/password
    • To reset your password, use


  • Fix output for ipv6 RDNS endpoints

    • PUT /networking/ips/:address now returns the modified v6 address
    • PUT /linode/instances/:id/ips/:address now returns the modified v6 address
  • Nothing has changed for these endpoints when :address is a v4 address
  • Fixed bug setting RDNS for v6 addresses
  • Fixed bug making it impossible to provide authorized_keys when rebuilding a Linode



  • Added GET /networking/ips

    • Returns all ipv4 and ipv6 addresses on your account
  • Added support for short region slugs

    • Omitting the suffix of a region slug picks a default
    • For example, "us-east" is treated as "us-east-1a"
  • Support tickets ordered by status, update date


  • Unified IPv4 and IPv6 Objects

    • Removed "range" from IPv6 object
    • Added "linode_id" to IPv6 object
    • Added "region" to IPv6 object
  • Removed GET /networking/ipv4
  • Separated /networking/ipv6 into /pools and /ranges

    • Added GET /networking/ipv6/pools
    • Added GET /networking/ipv6/ranges
    • Removed GET /networking/ipv6
  • Changed GET /linode/instances/:id/ips response

    • ipv6.link_local is now a full IPAddress object
  • Improved response for unrestricted user's grants

    • Changed GET /profile/grants and GET /account/users/:username/grants
    • Now returns a 204 with no content when getting grants for unrestricted users
  • Moved /linode/instances/:id/ips/sharing to /networking/ip-sharing

    • linode_id must now be passed in, along with existing ips list
  • Removed deprecated "distribution" fields and endpoints

    • Removed GET /linode/distributions
    • Removed GET /linode/distributions/:id
    • These fields or endpoints had been deprecated since 2017-12-11
  • Changed POST /managed/contacts

    • "phone" is an object containing primary and secondary numbers
    • phone_primary -> phone.primary
    • phone_secondary -> phone.secondary
  • Changed account/notifications

    • Removed xsa notification type
    • Renamed balance_outstanding to payment_due
  • Changed error response

    • "field" changed to represent nesting with x.x
  • Changed GET/PUT /account

    • Renamed "vat_number" to "tax_id"
  • Removed managed_issue from POST /support/tickets


  • Cloned linodes now copy original Linode's image
  • Fixed bug parsing OAuth Scopes when creating token



  • Added POST /images to create an image from a disk
  • Added "message" to Notification object

    • Described the notification in a human-readable manner
  • Added ability to enroll in Managed

    • POST /account/settings/managed-enable
  • Added "uid" to Profile response
  • Added ssl to PUT /nodebalancers/$id/configs/$id


  • Removed "token" Authorization scheme

    • The same value is accepted as "Bearer"
    • No longer accepted: "Authorization: token $TOKEN"
    • Please send as: "Authorization: Bearer $TOKEN"
  • Changed POST support/tickets

    • Now accepts "managed_issue" (boolean) instead of "managed_issue_type"
  • Reworked backups response

    • Removed "daily" and "weekly"
    • Added "automatic"
    • Removed "availability" from Backup object
    • Removed "service" object
  • Removed /linode/instance/:id/disk/:id/imagize

    • Functionality moved to POST /images
  • Reworked /account/settings into two endpoints

    • Changed /account/settings endpoint to /account
    • network_helper and longview_subscription remain in /account/settings
  • Removed 'max' from /account/transfer
  • Removed /nodebalancers/$id/configs/$id/ssl
  • Removed zonefile object from Domain
  • Changed Notification types

    • scheduled_migration -> migration_scheduled
    • pending_migration -> migration_pending
    • scheduled_reboot -> reboot_scheduled
    • outstanding_balance -> balance_outstanding
    • important_ticket -> ticket_important
    • abuse_ticket -> ticket_abuse


  • Fix Transfer Pool return values
  • Stopped returning default backups window for Linodes

    • This impacted Linodes that were still scheduling backups only
  • Don't set cancel_account grant when it's not requested
  • Suppresses shutdown event notification for rebuild
  • Send emails for TFA to the acting user



  • Added enable, disable managed service endpoints

    • Added POST /managed/services/:id/enable
    • Added POST /managed/services/:id/disable
    • Added status to managed service JSON response object
  • Added GET /managed/stats endpoint
  • Added PUT /managed/linode_settings
  • Added PUT endpoints to managed service
  • Add managed_issue_type to support/tickets/

    • GET /support/tickets returns new managed_issue_type key
    • POST /support/tickets now accepts this key if the account has Managed Services enabled
  • Added GET /managed/issues and GET /managed/issues/:id

    • GET /managed/issues returns all issues, including relevant history
    • GET /managed/issues/:id returns a single issue
    • Since managed issues are backed by support tickets, uses the ticket ID
  • Added vat_number to /account/settings

    • Can be viewed and updated
  • Sends emails when enabling/disabling TFA
  • Rendered zone file returned in Domain object
  • Added DELETE /managed/services/:id endpoint
  • Added DELETE /managed/contacts/:id


  • Update /linode/distributions and /image responses

    • remove status key
    • remove filesystem key
    • remove last_used key
    • rename creator -> created_by (string)
    • rename min_deploy_size -> size (int)


  • Allow filtering of GET /images



  • Added POST account/payments/paypal

    • Stages a PayPal payment and returns the payment_id
  • Added POST account/payments/paypal/execute

    • Execute a PayPal payment that has been authorized in PayPal
    • This is required for Linode to capture funds and credit your account
  • Added POST /domains/$id/clone

    • New endpoint can be reached at POST domains/:domain_id/clone
    • Requires a new domain be provided in the post body


  • Unify Distributions and Images

    • Removes Distribution.architecture
    • Renames Distribution.updated to last_used (Datetime)
    • Renames Distribution.disk_minimum to min_deploy_size (Integer)
    • Adds Distribution.filesystem (String)
    • Adds Distribution.created (Datetime)
    • Adds Distribution.description (String)
    • Adds Distribution.status (String)
    • Adds Distribution.type (String)
    • Adds Distribution.is_public (Boolean)
    • Adds Distribution.creator (String)
    • Adds Image.deprecated (Boolean)
  • Renamed "distribution" to "image"

    • POST /linode/instances takes "image" instead of "distribution"
    • POST /linode/instances/:id/disks takes "image" instead of "distribution"
    • POST /linode/instances/:id/rebuild takes "image" instead of "distribution"
    • Linode object returns "image" instead of "distribution"
    • StackScript object returns "images" instead of "distributions"
  • Change Image IDs to Slugs

    • slugs match the format private/:image_id
  • Moved volumes to top level

    • Changed all references from /linode/volumes to /volumes


  • Ensure POST domain/records accepts and honors ttl_sec
  • Fixed Linode create from a Stackscript using UDFs



  • Reworked UserGrant system

    • Three Grant levels are now enforced: No grants, "read_only", and "read_write"
    • "read_only" allows access to GET endpoints
    • "read_write" is equivalent to legacy "all" grant
    • Legacy "all" or "access" grants are treated as "read_write"
  • Changed GET /account/users/:username/grants

    • Grants response objects now always include "id", "label" and "permissions"
    • "permissions" can be null or an enum of either "read_only" or "read_write"
  • Changed PUT /account/users/:username/grants

    • Grants now accepted in the new format detailed above
  • Changed GET /profile/grants

    • Grants returned in new format detailed above
  • Added support for CAA Domain records
  • Changed POST /linode/instances/:id/disks

    • Now accepts "image" - an image ID to deploy from



  • Changed POST /account/payments

    • Now accepts "usd" as a string representing a dollar amount, including cents
    • Valid values include "0.10", "10.00", "100.20", and "$1.00"
    • Invalid values include 10, 10.01, "10", "10.001", and "10.0"
  • Added GET /account/notifications

    • Read-only collection of Notification objects
    • Returns important information about your account that may require action
  • Added GET /images

    • Lists images on your account
  • Added GET /images/:id

    • View a single image on your account
  • Added PUT /images/:id

    • Update an image on your account
  • Added DELETE /images/:id

    • Deleted an image you own
  • Added POST /linode/instances/:id/disks/:id/imagize

    • Creates a new image from a disk you own
  • Added GET /longview/clients

    • Returns a list of Longview clients on your account
  • Added POST /longview/clients

    • Creates a new Longview client on your account
  • Added GET /longview/clients/:id

    • Returns information on a single Longview client
  • Added PUT /longview/clients/:id

    • Update a single Longview client
  • Added DELETE /longview/clients/:id

    • Removes a longview client from your account
  • Added GET /longview/subscriptions

    • Returns all available longview subscription tiers
  • Added GET /longview/subscriptions/:id

    • Returns information one longview subscription tier
  • Changed GET /account/settings

    • Added "longview_subscription" - the tier at which you are subscribed to longview
  • Changed PUT /account/settings

    • Sending in "null" or an id to "longview_subscription" changes your longview subscription tier.
  • Change POST /linode/instances

    • Now accepts image - the ID of an image to deploy the linode with
    • Only one source attribute may be provided
  • Changed POST /linode/instances/:id/rebuild

    • Now accepts image - the ID of an image to rebuild the linode with
    • Only one source attribute may be provided
  • Added events for enabling/disabling TFA
  • Added Longview and Image grants to GET /users/:id/grants and GET /profile/grants

    • Response now includes "longview" attribute whose value is an array of grants your user has that relate to longview clients
    • Response now includes an "images" attribute whose value is an array of grants your user has that relate to images
    • Only applies to restricted users
  • Event objects may now have Longview clients or Images as their entities



  • EventType has changed from "blockstorage_" to "volume_"
  • Changed POST linode/instances/:id/configs

    • Removed root_device_ro
    • Now accepts "helpers", a dict accepting any/all of "updatedb_disabled", "distro", "modules_dep", "network", and "devtmpfs_automount"
    • Removed devtmpfs_automount (now in helpers envelope)
  • Changed POST linode/instances/:id/disks

    • root_ssh_key changed to "authorized_keys", now accepts a list of keys instead of a single string key
  • Changed POST linode/instances

    • root_ssh_key changed to "authorized_keys", now accepts a list of keys instead of a single string key
  • Changed POST linode/instances/:id/rebuild

    • root_ssh_key changed to "authorized_keys", now accepts a list of keys instead of a single string key
  • Changed POST linode/instances/:id/rescue

    • disks changed to "devices", now accepts device mappings in the same format as POST linode/instances/:id/configs
  • Changed Linode object

    • Moved "disk", "memory", "storage", "transfer_total", and "vcpus" into a "specs" envelope
    • transfer_total => transfer in linode specs
    • transfer_in => network_in
    • transfer_out => network_out
  • Changed LinodeConfig object

    • Removed root_device_ro
  • Changed LinodeType object

    • Moved backups_option.price_hourly to addons.backups.price.hourly
    • Moved backups_option.price_monthly to addons.backups.price.monthly
    • Moved price_hourly to price.hourly
    • Moved price_monthly to price.monthly
  • Changed OAuthToken

    • Removed client envelope
    • Removed type
  • Changed account/tokens

    • Endpoint moved to profile/tokens
    • GET now only returns Personal Access Tokens
  • Changed account/clients

    • Endpoint moved to account/oauth-clients
    • Collection now allows access to all clients for all users on your account if you are an unrestricted user
  • Added profile/apps

    • Collection of authorized third-party applications
  • OAuthClient now has a "public" attribute

    • "public" is an optional argument to POST account/clients that defaults to False
  • Added POST account/credit-card

    • Updates current payment method on file
  • Added GET account/payments

    • Returns a list of all payments made for your account
  • Added GET account/payments/:id

    • Returns information about a single payment made for your account
  • Added POST linode/volumes/:id/clone
  • Changed Disk Status

    • Now always one of "ready", "not ready", or "deleting"



  • Pagination envelope has changed

    • total_pages => pages
    • total_results => results
    • endpoint-specific key is now always "data"
  • Region, Distribution, Type, and Kernel objects are now returned as slugs

    • Previously, entire object was returned as part of other responses
  • POST linode/instances and POST linode/rebuild automatically issue a boot job

    • This behavior can be suppressed by sending "boot": false in the request
  • Changed POST linode/instances

    • with_backups => backups_enabled
    • Now accepts "booted" - defaults to true if distribution is provided
  • Changed POST linode/instances/:id/clone

    • with_backups => backups_enabled
  • Changed POST linode/instances/:id/rebuild

    • Now accepts "booted" - defaults to true
  • Changed LinodeNetworkingResponse

    • region is now a slug instead of a nested object
  • Changed IPv6 object

    • region is now a slug instead of a nested object
  • Changed Invoice object

    • Removed "paid"
    • Removed "overdue"
  • Changed Region object

    • Removed "label"
  • Changed Backup object

    • regions is now a slug instead of a nested object
  • Changed Distribution object

    • Removed "created"
    • Added "updated"
    • minimum_storage_size => disk_minimum
    • x64 => architecture. architecture is an enum returning either "x86_64" or "i386"
  • Changed IPAddress object

    • region is now a slug instead of a nested object
  • Changed Kernel object

    • x64 => architecture. architecture is an enum returning either "x86_64" or "i386"
  • Changed Linode object

    • storage => disk
    • total_transfer => transfer_total
    • distribution is now a slug instead of a nested object
    • region is now a slug instead of a nested object
    • nested alert objects have been streamlined
    • "enabled" and "threshold" have been removed
    • a value of 0 now represents "disabled", any other value is "enabled" with that threshold
  • Changed LinodeConfig object

    • disable_updatedb => updatedb_disabled
    • enable_distro_helper => distro
    • enable_modules_dep_helper => modules_dep
    • enable_network_helper => network
    • ram_limit => memory_limit
    • devtmpfs_autocommit moved into "helpers" envelope
  • Changed Nodebalancer object

    • region is now a slug instead of a nested object
  • Changed Type object

    • hourly_price => price_hourly
    • monthly_price => price_monthly
    • ram => memory
    • storage => disk
    • mbits_out => network_out
    • backups_price is now a nested object containing "price_hourly" and "price_monthly"
  • Changed StackScript object

    • Removed "customer_id"
    • distributions is now a list of slugs instead of a list of nested objects
    • Removed "user_id"
    • Added "username"
    • Added "user_gravatar_id"
  • Changed Volume object

    • "status" can no longer contain "contact_support" - will return "offline" in that case
    • region is now a slug instead of a nested object
  • Changes SupportTicket

    • Removed "closed_by"
  • IP Whitelist may not be enabled in PUT profile if it is already disabled
  • Default page size increased to 100

    • Any page size between 25 and 100 may be requested in the url with ?page_size=
  • Linode configs now accept deprecated kernels
  • Linode configs now default kernel to latest, no longer required on POST
  • Added /profile/whitelist

    • GET - list all IPs on user's whitelist
    • POST - add IP to user's whitelist
    • Endpoint return a 400 if IP Whitelist is disabled
  • Added /profile/whitelist/:id

    • GET - return one entry on whitelist
    • DELETE - remove address from whitelist
    • Endpoints return a 400 if IP Whitelist if disabled
  • Disk filesystems now default to ext4, no longer required on POST