Request and Response Formats

Request

The No-IP API follows HTTP standards. URL path segments and query parameter are expected to be percent-encoded.

The request body is always JSON format unless otherwise noted. The content-type HTTP header must be set to application/json.

Example Request with Curl

curl --user ":<api key>" \
  --header "Content-Type: application/json" \
  --data '{"zone_name": "example.com"}' \
  https://api.noip.com/v1/dns/zones

Response

The No-IP API makes use of the standard HTTP response codes to indicate success and failure. Specific possible codes are included for each resource in the API reference.

  • 200 - 299: Success.
  • 400 - 499: Client error; correct the error in the request and submit it again.
  • 500 - 599: Server error; the API is experiencing problems. Our engineering team has been automatically notified.

Success

The response body of successful requests will be returned as a JSON object. If there is data in the response it will be under the data key.

{
    "data": {
        "name": "example.com",
        "created_at": "2019-08-24T14:15:22Z",
        "updated_at": "2024-08-24T14:15:22Z"
    }
}

Other keys may exist that describe or augment the data, such as warnings and page information.

Paging

When the data key is an array a sibling key, page, will accompany it with information about the list.

page is an object with three keys,

  • limit: the maximum number of items in the data array.
  • offset: the start position of the data.
  • total: the total number of items available.

Example

{
    "data": [
        {
            "name": "example.com",
            "created_at": "2019-08-24T14:15:22Z",
            "updated_at": "2024-08-24T14:15:22Z"
        }
    ],
    "page": {
        "limit": 0,
        "offset": 0,
        "total": 10
    }
}

Warnings

A top level field warnings: [] may be included in all responses as a
sibling to data: and paging:. Non-critical indications may appear here, such as approaching expirations and SPF formatting issues in TXT records.

Success Example

{
  "data": [ ... ],
  "page": { ... },
  "warnings": [
    {
      "title": "Change may not be as expected",
      "code": "W1000",
      "detail": "Request was completed but has a possibly unwanted side effect."
    }
  ]
}

Errors

Responses with HTTP codes 400 - 499 will have a JSON response body. Responses
with HTTP codes 500 - 599 may have a JSON body but since they are a critical server error that cannot be guaranteed.

The errors key will always be a list of objects.

Error object fields. id, code, and title will always be included.

  • id: a unique string that identifies this error in our logs
  • code: identifies exactly in our code where the problem occurred and is very helpful in debugging
  • title: the main error message
  • detail: additional information specific to this request
  • location: in what part of the request the error occurred. For instance "query" for the query string.
  • pointer: more exact information on where the error occurred, such as a JSON pointer, if possible.

Example

{
  "errors": [{
    "id": "err_eXgLfYUj",
    "code": "2451",
    "title": "invalid request query",
    "detail": "unknown variant `summary`, expected `detail` or `name_only`",
    "location": "query"
  }, {
    "id": "err_oWfehpGt",
    "code": "3809",
    "title": "invalid url encoded request body",
  }],
}

Warnings

Non-critical indications may appear in the warnings key along with errors,
such as approaching expirations and SPF formatting issues in TXT records.

Error Example

{
  "errors": [ ... ],
  "warnings": [
    {
      "title": "Resource expiring soon",
      "code": "W1001",
      "detail": "The related resource will expire soon"
    }
  ]
}

Timestamps and Timezones

Timestamp fields in the No-IP API are represented as strings that are returned in the RFC 3339 format . Timestamps returned by the API are in UTC which is indicated by a Z at the end.

Rate Limits

The No-IP API enforces a limit on all accounts of 50 requests per 60 seconds with a burst of 750 requests in a 15 minute window. If you exceed the rate limit No-IP will return {"errors":[{"id":"err_xxxxxxxx","code":"1097","title":"too many requests","detail":""}]} and an HTTP Status Code of 429.

Details about the current rate limit state can be seen in the HTTP Header.

x-ratelimit-limit: 10
x-ratelimit-remaining: 9
x-ratelimit-reset: 0

For higher volume accounts please contact us to discuss our enterprise plans.