4.14.0: 2020-02-10




  • Previously, View Network Utilization (GET /account/transfer/) did not include Object Storage outgoing network transfer in its network utilization for the current month. If you have the Linode Object Storage service enabled on your account, View Network Utilization will now include Object Storage's outgoing network transfer in its total returned amount.

  • When a Linode that was deployed from a StackScript is deleted, that StackScript's deployments_active value should decrease. This property's value was incorrectly reporting the number of active deployments for a StackScript. This has been corrected.

  • Previously, after booting a Linode into rescue mode (POST /linode/instances/{linodeId}/rescue), when attempting to reboot your Linode (POST /linode/instances/{linodeId}/reboot), you would receive an error message, No bootable config found. This bug has been fixed and the Linode will reboot into the latest configuration profile that isn't a rescue mode configuration profile.

  • Restoring a Linode (POST /linode/instances/{linodeId}/backups/{backupId}/restore) from a backup that was still in its postprocessing phase returned the error message "backup is not valid". The error message has been updated to be more descriptive. Now, when you attempt to restore a Linode from a backup that is still post processing, the returned error message is "Backup is currently postprocessing".

  • Iterated on a bug fix with migrations, clones, and host information. If the migration is a disk or a clone, the from_host is the disk. Users can see migration job information in the Event endpoints:

  • Fixed the url in the Close Support Ticket (POST /support/tickets/{ticketId}/close) endpoint's Request Sample shell curl example.


4.13.0: 2020-01-27


  • Updated OAuth section with detailed private and public workflows.

  • Updated Create Kubernetes Cluster (POST /lke/clusters) endpoint to include multiple node pools in the CLI code example.

    • Argument order is imperative. The arguments must be in sequential order --node_pools.type [type] followed by --node_pools.count [count] for each node pool.

    • You may add one or more node pool to each cluster.


  • Fixed a bug with migrations and host information. If the migration is a disk, the from_host is the disk, if it's a clone, the from_host is the Linode. Users can see migration job information in the event endpoints:

  • +and, +or, and +order_by filters for tags are now working.

  • Longview will now retain more than 12 hours of statistics for users with the Pro plan.

  • The List Networking Information (GET /linode/instances/{linodeId}/ips) endpoint has been updated to only output IPv6 addresses for the specified Linode instead of all the IPv6 addresses for the customer.


4.12.0: 2020-01-13


  • Removed edit_mode as an option for a Domain's status property.

    • Use the /domains collection to review your account's domains.
  • Object Storage is out of Beta. All Object Storage endpoints now point to the /v4 server instead of the /v4beta server.


  • When a restricted user with the add_longview grant creates a Longview client, that user should have read_write permissions on the new client.

    • The API correctly grants this permission, and so a user could make successful Update Longview Client (PUT /longview/clients/{clientId}) endpoint requests for the new client.
    • However, the API would incorrectly report that the user had read_only permissions for that Longview client when viewed with the View User's Grants (GET /account/users/{username}/grants) endpoint.
    • This has been corrected, and this endpoint will now report read_write permissions for the new client.
  • Fixed an issue where the duration of an Event with a status of failed would indefinitely increase.
  • Fixed an issue where Isle of Man's country code was rejected by the Update Account (PUT /account) endpoint.
  • Updates to Domains:

    • Resolved an issue when importing domains which caused server errors for the API.
    • Previously, the API would only check if a CNAME for a Domain was unique among all of that Domain's CNAME records. The API will now check to make sure that a CNAME has a name that is unique among all of a Domain's records.
    • Use the /domains collection to review your account's domains. Use the Import Domain (POST /domains/import) to import domains with the API.
  • Previously, the last_successful property of a Linode's backups property was documented as returning None if no backup had been completed for that Linode. The API actually returns null under this circumstance, and the documentation has been updated to reflect this.

  • Updates to Invoices and InvoiceItems:

    • The API was inappropriately rounding the unitprice on InvoiceItems for certain Linode products. For example, the API would report .01 for the unitprice of an InvoiceItem for a Nanode, while the hourly cost of a Nanode is .0075. This issue did not affect the actual amount billed to a customer.
    • The unitprice, amount, tax, and total properties of an InvoiceItem and the subtotal, tax, and total properties of an Invoice were previously documented as having the type integer, but the API accepted and returned numbers with decimal points. The documentation for these types now list these properties as having the type number.
    • Removed prepay as an option for the type of an InvoiceItem in the API documentation. Prepaid billing reached end of life in March of 2019.
    • Use the List Invoices (GET /account/invoices), View Invoice (GET /account/invoices/{invoiceId}), and List Invoice Items (GET /account/invoices/{invoiceId}/items) endpoints to review your Invoices and InvoiceItems.






  • Added the status property to List Regions (GET /regions) and View Region (GET /regions/{regionId}). The status property returns a region's current operational status.

  • A linode_config_create, linode_config_delete, linode_config_update, disk_create, disk_update Event action can now generate a secondary_entity object. A secondary_entity object displays information about an additional entity that is related to the Event.

  • When creating or updating a Domain Record of type SRV, the target field now accepts a value of .. By setting the target of an SRV record to ., you can indicate that a particular service is not supported at a particular domain. See RFC 6186, section 3.4 for details on this usage.


  • You can now use the +order_by operator to filter by region when Listing Linodes (GET /linode/instances). Previously, this would result in an unable to apply filter error.

4.9.0: 2019-11-18


Note: These endpoints are prepended with /v4beta instead of /v4.



  • Users will now receive a 200 response when using the Open Support Ticket (POST /support/tickets) endpoint even if the domain associated with it has the status has_errors.

  • The List Notifications (GET /account/notifications) endpoint now returns the correct data for the when property for scheduled maintenance/migration notifications.

  • Fixed an issue where users could not enable backups on newly resized Linodes.


4.8.0: 2019-10-21


  • Added the Cancel Object Storage (POST /object-storage/cancel) endpoint.

    • This endpoint allows you to remove Object Storage from an Account. All buckets must be empty in order to use this endpoint.
  • Added the duration property to Events, which represents the total duration in seconds that it takes for an Event to complete. Use the List Events (GET /account/events) and View Event (GET /account/events/{eventId}) endpoints to review your Account's Events.
  • The View Account Settings (GET /account/settings) endpoint has been updated to include the status of an Account's Object Storage service. The possible values for this status are disabled, suspended, and active.


  • China UnionPay credit card numbers are now accepted as valid by the Add/Edit Credit Card (POST /account/credit-card) endpoint.
  • When a Support Ticket is updated, email notifications are sent to customers for those updates. Previously, an email was sent for every Ticket update, including any submitted by the customer. Now, only Ticket updates from Linode Support will prompt an email.


  • Calls to the Update User Preferences (GET /profile/preferences) endpoint were returning an HTTP 500 error. This error has been resolved, and user preferences will now be saved as expected.
  • Domains under the .rio.br second-level domain are now accepted as valid. Domains can be entered with the Create Domain (POST /domains), Update Domain (PUT /domains/{domainId}), or Import Domain (POST /domains/import) endpoints.
  • Fixed an issue where a restricted User with read-only permissions on an Account's private StackScript could view that StackScript but could not deploy a Linode with it. The restricted User will now be able to deploy the StackScript.


4.7.0: 2019-10-21


  • Added the tfa_enabled property to the /account/users endpoint collection. This property returns a boolean value indicating if the User has Two Factor Authentication (TFA) enabled. See the Create Two Factor Secret (POST /profile/tfa-enable) endpoint to enable TFA.
  • Added the upgrade property to the Initiate Pending Host Migration/DC Migration (POST /linode/instances/{linodeId}/migrate) endpoint
  • The secondary_entity property of a disk_delete Event will now be populated with the disk that has been deleted. This property was not previously assigned a value. The primary entity property for a disk_delete Event is associated with the Linode that the disk was deleted from.


  • Changed how Notifications for promotional credits are generated:

    • For expiring promotional credits, a Notification was only generated when the promotion was within 7 days of expiring and when 90% of the credit had been used. This Notification would be of type promotion.
    • Now, two different Notifications are generated:
    • A Notification of type promo_expiration will be generated when the promotion is within 7 days of its expiration date.
    • A Notification of type promo_credit_limit will be generated when 90% or more of the promotion's credit has been used.
    • Notifications of type promotion will no longer be generated.
    • Refer to the List Notifications (GET /account/notifications) endpoint to view your account's notifications. Refer to the active_promotions property in the response from the View Account (GET /account) endpoint for details of your current promotions.


  • Improved the error response messages of the Initiate Pending Host Migration/DC Migration (POST /linode/instances/{linodeId}/migrate) endpoint:

    • This endpoint will return an error when called when both of these conditions are true:
    • The Linode has a /116 IPv6 pool, or IP Sharing is enabled.
    • An NGN data center was specified for the region property.
    • Previously, the error message returned when a /116 pool caused the migration to fail would state that IP Sharing was enabled, which may not have been the case.
    • The endpoint will now return a different error message when a /116 IPv6 pool is present.
  • Support Tickets returned by the List Support Tickets (GET /support/tickets) endpoint can now be sorted by the closed, opened, and updated properties of a Ticket. This was the intended behavior, but specifying a sorting was not previously honored in the response.
  • In rare circumstances, a Linode may exist without an Invoice Item that corresponds to it. If the Initiate Pending Host Migration/DC Migration (POST /linode/instances/{linodeId}/migrate) endpoint was called on a Linode under these circumstances, the endpoint would return an error. This error will no longer appear, and the migration will proceed normally (or fail for any other reasons listed in the endpoint's documentation).
  • The Import Domain (POST /domains/import) endpoint would sometimes return a 400 error code when a server error had occurred. A 500 error code will now be returned instead, which is in line with our API's guidance on error codes.

4.6.0: 2019-10-07



  • A linode_reboot Event action can now generate a secondary_entity object. A secondary_entity object displays information about an additional entity that is related to the Event.

  • The List Managed Stats endpoint GET managed/stats returns a list of Managed Stats on your Account in the form of x and y data points. You can use these data points to plot your own graph visualizations. These stats reflect the last 24 hours of combined usage across all managed Linodes on your account giving you a high-level snapshot of data for cpu, disk, swap, network in, and network out.


  • Fixed a formatting error that prevented the filtering and sorting examples within the API documentation from correctly working as presented.

  • Fixed an issue that allowed Linodes with IPv6 /116 pools to attempt to migrate to Next Generation Network (NGN) enabled data centers like Toronto and Mumbai. IPv6 /116 pools are not supported by NGN data centers, so these migrations would never actually progress. A Linode with IPv6 /116 pools will now be prevented from initiating a migration to an NGN data center, and the user will be prompted to contact support.


4.5.0: 2019-09-23


  • Added the Enable Linode Managed (POST /account/settings/managed-enable) endpoint to Account.

    • This endpoint enables Linode Managed for the entire account and sends a welcome email to the account’s associated email address.
    • Linode Managed is an incident response service that can monitor any software stack or service reachable over TCP or HTTP.


  • The List Notifications endpoint (GET /account/notifications) now provides more detailed information when a pending host migration or DC migration (POST /linode/instances/{linodeId}/migrate) for a Linode is initiated. This information includes:

    • How many Linodes are in the queue ahead of your Linode. The Linode's position is dynamically generated, so if the notification is retrieved at an interval, it is always up-to-date.
  • The convenience endpoint List Object Storage Bucket Contents ([GET /object-storage/buckets/{clusterId}/{bucket}/object-list] (https://developers.linode.com/api/v4/object-storage-buckets-cluster-id-bucket-object-list)) now returns two new parameters to help with pagination:

    • is_truncated, a boolean which is true if there is another page of objects and
    • next_marker, a string value to pass to the marker query parameter to get the next page of objects.


  • Previously, when restoring a Linode from a backup (POST /linode/instances/{linodeId}/backups/{backupId}/restore) with overwrite:true, some disks on the Linode were not properly deleted. This bug has been fixed. Additionally, the check to determine if the Linode has enough free disk space during a backup restore has been improved.

  • The List Support Tickets endpoint (GET /support/tickets) will now properly honor the order_by and x-filter query parameters.


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 developers.linode.com 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 entity.id
    • If filtering by entity.id, 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 manager.linode.com


  • 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