Skip to content

Library Availability API v1

The Library Availability API delivers availability information for a product (title) in a specific library or school collection. This includes the number of copies owned, the number of holds on that title, and whether or not it is currently available for checkout.

To use the newer version of the Library Availability API, see our documentation here. We'll continue to support v1, but we recommend that you switch to v2 as soon as possible.

Note: The examples below show our production API URL. If you're using our integration environment, use https://integration.api.overdrive.com or https://integration-patron.api.overdrive.com.

Using the Library Availability API

The Library Availability API returns availability information on a library or school title and can be accessed with a hypermedia link from the Search API results.

Requests to this API accept either a reserveId or crossRefId. The reserveId is not case-sensitive.

Resource URL

https://api.overdrive.com/v1/collections/{collectionToken}/products/{reserveId}/availability

Example request

GET https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/products/ebff8d7b-c9a0-4478-a1ed-63b64e8386c5/availability
User-Agent: {Your application}
Authorization: Bearer {OAuth access token}
Host: api.overdrive.com

Example response

200 OK
Date: Tue, 07 May 2024 18:50:12 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 469
Content-Type: application/json; charset=utf-8

{
	"id": "ebff8d7b-c9a0-4478-a1ed-63b64e8386c5",
	"crossRefId": 1427131,
	"links": {
		"self": {
			"href": "https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/products/ebff8d7b-c9a0-4478-a1ed-63b64e8386c5/availability",
			"type": "application/vnd.overdrive.api+json"
		}
	},
	"collections": [
		{
			"id": "Your Public Library",
			"copiesOwned": 5,
			"copiesAvailable": 5,
			"numberOfHolds": 0
		}
	],
	"available": true,
	"availabilityType": "Normal",
	"copiesOwned": 5,
	"copiesAvailable": 5,
	"numberOfHolds": 0
}

This response shows:

  • collections: shows the number of copies owned/available/on hold for each library or school represented in the collection token.
  • available: either "true" or "false." When a title is available, it can be checked out by a user.
  • copiesOwned: how many total copies there are in the collection.
  • copiesAvailable: how many copies are available for checkout.
  • numberOfHolds: how many holds there are on the title.
  • availabilityType: can be used to differentiate Subscription titles from other lending models. Most titles have an availabilityType of "Normal," while Subscription titles have an availabilityType of "AlwaysAvailable."

Additional fields:

  • If you're using an authenticated patron access token, you'll see actions that allow you to check out the title (using the Checkouts API) or place a hold (using the Holds API).
  • If a title is a preorder (i.e., it hasn't been released yet), it can be placed on hold but not borrowed. You'll see an onSaleDate that tells you when users can start borrowing the title.

Subscription titles

Subscription titles have an availabilityType of "AlwaysAvailable," can be borrowed by unlimited users at the same time, and don't require users to place holds.

In API responses, a Subscription title has approximately 999,999 copies available within a given collection. This number can be larger if the library or school purchased copies of the title in a different lending model before purchasing it as a Subscription.

Example response

200 OK
Date: Tue, 07 May 2024 18:56:54 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 445
Content-Type: application/json; charset=utf-8

{
	"id": "c02f9972-631d-483c-a0a3-d6359534851d",
	"crossRefId": 505428,
	"links": {
		"self": {
			"href": "https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/products/C02F9972-631D-483C-A0A3-D6359534851D/availability",
			"type": "application/vnd.overdrive.api+json"
		}
	},
	"collections": [
		{
			"id": "Your Public Library",
			"copiesOwned": 999999,
			"copiesAvailable": 999999,
			"numberOfHolds": 0
		}
	],
	"available": true,
	"availabilityType": "AlwaysAvailable",
	"copiesOwned": 999999,
	"copiesAvailable": 999999,
	"numberOfHolds": 0
}

Making a bulk availability call

You can use this endpoint to get availability for up to 25 titles at once. In the GET request, separate the reserveIds (or titleIds) for each title with commas. Note that reserveIds are not case sensitive, and you cannot have both reserveIds and titleIds in the same bulk request; you must choose one or the other.

Example request

GET https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/availability?products=82ef8ec3-386b-4561-8f65-2d59433b9358%2C50a5ee33-4ca2-4366-a3ed-28b80c0a5cf6
User-Agent: {Your application}
Authorization: Bearer {OAuth access token}
Host: api.overdrive.com

Example response

200 OK
Date: Mon, 10 Jun 2024 19:07:45 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 670
Content-Type: application/json; charset=utf-8

{
	"id": "OverDrive API Integration Library (OH)",
	"availability": [
		{
			"id": "82EF8EC3-386B-4561-8F65-2D59433B9358",
			"crossRefId": 1381708,
			"accountId": 4425,
			"available": true,
			"availabilityType": "Normal",
			"copiesOwned": 1,
			"copiesAvailable": 1,
			"numberOfHolds": 0
		},
		{
			"id": "50A5EE33-4CA2-4366-A3ED-28B80C0A5CF6",
			"crossRefId": 3280473,
			"accountId": 4425,
			"available": true,
			"availabilityType": "Normal",
			"copiesOwned": 1,
			"copiesAvailable": 1,
			"numberOfHolds": 0
		}
	],
	"totalItems": 2,
	"links": {
		"self": {
			"href": "https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/availability?products=82ef8ec3-386b-4561-8f65-2d59433b9358,50a5ee33-4ca2-4366-a3ed-28b80c0a5cf6",
			"type": "application/vnd.overdrive.api+json"
		}
	}
}

If any of the reserveIds or crossRefIds passed in the request aren't in the collection (or aren't formatted correctly, etc.), then you'll get a "400 BadRequest" response:

Example error response

400 BadRequest
Date: Tue, 30 Jul 2024 17:00:04 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 113
Content-Type: application/json; charset=utf-8			

{
	"errorCode": "InvalidGuid",
	"message": "An invalid guid was given.",
	"token": "6263d6be-8642-46f3-8ff4-6e5baca29dbb"
}