Checkouts API
The Checkouts API is your path to borrowing, returning, and checking the status of titles.
Note: The examples below show our production API URL. If you're using our integration environment, use https://integration-patron.api.overdrive.com.
Using the Checkouts API
Using POST, GET, and DELETE requests, you can use the Checkouts API to borrow, fulfill, and return titles.
Resource URL
https://patron.api.overdrive.com/v1/patrons/me/checkouts
Available endpoint actions
- GET user checkouts: This request returns a current list of the user's borrowed titles or finds a specific title they've borrowed.
- Check out (borrow) a title (POST): This request borrows a title on the user's behalf.
- Fulfill a checked out title (GET): This request redirects the user to an interface where they can choose a format and open a borrowed title.
- Return a title (DELETE): This request allows you to return a title on behalf of a user.
GET a list of a user's checkouts
Below is the example GET request sent to the /v1/patrons/me/checkouts endpoint.
Example request
GET https://patron.api.overdrive.com/v1/patrons/me/checkouts
User-Agent: {Your application}
Authorization: Bearer {OAuth patron access token}
Host: patron.api.overdrive.comThe response includes a list of titles that the authenticated user currently has checked out.
Example response
200 OK
Date: Mon, 13 May 2024 17:46:57 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 1959
Content-Type: application/json; charset=utf-8
{
"totalItems": 2,
"totalCheckouts": 2,
"checkouts": [
{
"reserveId": "2EEC1B6A-9C0A-4FFF-BAAB-60B3B1019E6A",
"crossRefId": 19532,
"expires": "2024-05-20T16:56:48Z",
"isFormatLockedIn": false,
"links": {
"self": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/2EEC1B6A-9C0A-4FFF-BAAB-60B3B1019E6A",
"type": "application/vnd.overdrive.circulation.api+json"
},
"metadata": {
"href": "https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/products/2EEC1B6A-9C0A-4FFF-BAAB-60B3B1019E6A/metadata",
"type": "application/vnd.overdrive.api+json"
},
"downloadRedirect": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/2EEC1B6A-9C0A-4FFF-BAAB-60B3B1019E6A/formats/downloadRedirect",
"type": "application/vnd.overdrive.circulation.api+json"
}
},
"actions": {
"earlyReturn": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/2EEC1B6A-9C0A-4FFF-BAAB-60B3B1019E6A",
"method": "delete"
}
},
"checkoutDate": "2024-05-13T16:56:48Z"
},
{
"reserveId": "E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1",
"crossRefId": 230,
"expires": "2024-05-27T16:59:27Z",
"isFormatLockedIn": false,
"links": {
"self": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1",
"type": "application/vnd.overdrive.circulation.api+json"
},
"metadata": {
"href": "https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/products/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1/metadata",
"type": "application/vnd.overdrive.api+json"
},
"downloadRedirect": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1/formats/downloadRedirect",
"type": "application/vnd.overdrive.circulation.api+json"
}
},
"actions": {
"earlyReturn": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1",
"method": "delete"
}
},
"checkoutDate": "2024-05-13T16:59:27Z"
}
],
"links": {
"self": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts",
"type": "application/vnd.overdrive.circulation.api+json"
}
}
}Use the hypermedia links in the Checkouts response to make calls to other APIs for more information on a given title (like Metadata). You can also return a book on a user's behalf (via the earlyReturn action).
GET information about a specific checkout
To get information about a specific checkout, you can make a GET request to the checkouts endpoint with the reserveId or crossRefId (also called the titleId).
Example request
GET https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1
HTTP/1.1
User-Agent: {Your application}
Authorization: Bearer {OAuth patron access token}
Host:patron.api.overdrive.comExample response
200 OK
Date: Mon, 13 May 2024 17:14:10 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 883
Content-Type: application/json; charset=utf-8
{
"reserveId": "E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1",
"crossRefId": 230,
"expires": "2024-05-27T16:59:27Z",
"isFormatLockedIn": false,
"links": {
"self": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1",
"type": "application/vnd.overdrive.circulation.api+json"
},
"metadata": {
"href": "https://api.overdrive.com/v1/collections/v1L1BBQ0AAA2_/products/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1/metadata",
"type": "application/vnd.overdrive.api+json"
},
"downloadRedirect": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1/formats/downloadRedirect",
"type": "application/vnd.overdrive.circulation.api+json"
}
},
"actions": {
"earlyReturn": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/E96BA937-CB3E-4B8F-B2E7-51A8B43C10D1",
"method": "delete"
}
},
"checkoutDate": "2024-05-13T16:59:27Z"
}Checking out a title (POST)
You can borrow a title on a user's behalf by sending a POST request to the checkouts endpoint. This request must include the title's reserveId or crossRefId in the request body (as a name and value pair).
Example request
POST https://patron.api.overdrive.com/v1/patrons/me/checkouts
HTTP/1.1
User-Agent: {Your application}
Authorization: Bearer {OAuth patron access token}
Content-Type: application/json; charset=utf-8
Host: patron.api.overdrive.com
Content-Length: 138
Expect: 100-continue
{
"fields": [
{
"name": "id",
"value": "66874492-3f83-4f66-a3b0-354d0d8d5a78"
}
]
}Example response
201 Created
Location: https://patron.api.overdrive.com/v1/patrons/me/checkouts/66874492-3f83-4f66-a3b0-354d0d8d5a78
Date: Thu, 16 May 2024 21:27:51 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 881
Content-Type: application/json; charset=utf-8
{
"reserveId": "66874492-3f83-4f66-a3b0-354d0d8d5a78",
"crossRefId": 574435,
"expires": "2024-05-30T21:27:51Z",
"isFormatLockedIn": false,
"links": {
"self": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/66874492-3f83-4f66-a3b0-354d0d8d5a78",
"type": "application/vnd.overdrive.circulation.api+json"
},
"metadata": {
"href": "https://api.overdrive.com/v1/collections/v1P2BvyQAAAImAAA1U/products/66874492-3f83-4f66-a3b0-354d0d8d5a78/metadata",
"type": "application/vnd.overdrive.api+json"
},
"downloadRedirect": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/66874492-3f83-4f66-a3b0-354d0d8d5a78/formats/downloadRedirect",
"type": "application/vnd.overdrive.circulation.api+json"
}
},
"actions": {
"earlyReturn": {
"href": "https://patron.api.overdrive.com/v1/patrons/me/checkouts/66874492-3f83-4f66-a3b0-354d0d8d5a78",
"method": "delete"
}
},
"checkoutDate": "2024-05-16T21:27:51Z"
}Fulfilling a checked out title (GET)
The downloadRedirect link (available in the GET and POST checkout responses) points to the OverDrive fulfillment interface, where your user can select a format for the title and open it.
Format options vary by title, by type of content (ebooks, audiobooks, etc.), and by type of library (public, school, law, etc.).
Note: When designing buttons/links in your user interface for the downloadRedirect link, we recommend using more neutral language like "Get book" (instead of "Download"), since most titles can be opened in the browser right away.
Example request
GET https://patron.api.overdrive.com/v1/patrons/me/checkouts/229991A9-E9E0-42D3-A106-2F016941CD69/formats/downloadredirect
HTTP/1.1
User-Agent: {Your application}
Authorization: Bearer {OAuth patron access token}
Host: patron.api.overdrive.comA successful request will return a "302 Found" response.
Example response
302 Found
Transfer-Encoding: chunked
Location: https://{site}.overdrive.com/fulfillment/229991A9-E9E0-42D3-A106-2F016941CD69?code=2fb88da1ab0a872c0d5affb7afc09bb1b34b6d932cd5a067e443d7a36380ed96&client={client}
Date: Wed, 28 Aug 2024 14:53:58 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomainsThe fulfillment interface's UI is provided by OverDrive, but you can choose how it's displayed: as a new browser window, as a new tab, or in an iframe.
If using an iframe:
- Make sure scrolling is enabled, so all content and options appear.
- Note that users may be prompted to refresh the page if something goes wrong.
Returning a title (DELETE)
Titles are automatically returned once their lending period expires, but you can return a book on a user's behalf before then by making a DELETE request to the checkouts endpoint.
Example request
DELETE https://patron.api.overdrive.com/v1/patrons/me/checkouts/08F7D7E6-423F-45A6-9A1E-5AE9122C82E7
User-Agent: {Your application}
Authorization: Bearer {OAuth patron access token}
Host: patron.api.overdrive.comThe response will show a "204 NoContent" message when the return has been completed successfully.
Example response
204 NoContent Date: Fri, 17 May 2024 20:50:22 GMT X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000; includeSubDomains
Note that if a user has selected the ebook-kindle format for a title and wants to return it early, they must go through Amazon. You’ll get a "400 BadRequest" error if a Kindle Book is returned via the checkouts endpoint.
Example response
400 BadRequest
Date: Tue, 12 Nov 2024 20:13:36 GMT
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Length: 177
Content-Type: application/json; charset=utf-8
{
"errorCode": "CannotEarlyReturnWhenFulfilledOnKindle",
"message": "This loan was sent to Kindle so it must be returned via Amazon.",
"token": "a3df449f-3cec-41b0-9d8c-a24f0491bbd1"
}