FOLIO · Schema

Loan

Links the item with the patron and applies certain conditions based on policies

CompanyLibrariesLibrary Services PlatformOpen SourceMicroservicesEducation

Properties

Name Type Description
id string Unique ID (generated UUID) of the loan
userId string ID of the patron the item was lent to. Required for open loans, not required for closed loans (for anonymization).
borrower object Additional information about the borrower of the item, taken from the user referred to by the userId
proxyUserId string ID of the user representing a proxy for the patron
itemId string ID of the item lent to the patron
loanPolicyId string ID of last policy used in relation to this loan
loanPolicy object Additional information about the loan policy of the item, taken from the loan loanPolicyId
overdueFinePolicyId string ID of last overdue fine policy used in relation to this loan
overdueFinePolicy object Additional information about the overdue fine policy of the item, taken from the loan overdueFinePolicyId
lostItemPolicyId string ID of last lost item policy used in relation to this loan
lostItemPolicy object Additional information about the lost item policy of the item, taken from the loan lostItemPolicyId
item object
itemEffectiveLocationIdAtCheckOut string The effective location, at the time of checkout, of the item loaned to the patron.
status object Overall status of the loan
loanDate string Date and time when the loan began
dueDate string Date and time when the item is due to be returned
returnDate string Date and time when the item was returned
systemReturnDate string Date and time when return was processed
action string Last action performed on a loan (currently can be any value, values commonly used are checkedout and checkedin)
actionComment string Last action performed on a loan comments
renewalCount integer Count of how many times a loan has been renewed (incremented by the client)
dueDateChangedByRecall boolean Is due date changed by recall request
dueDateChangedByNearExpireUser boolean Indicates whether or not this loan had its due date modified by a expired user
dueDateChangedByHold boolean Is due date changed by hold request
checkoutServicePointId string ID of the Service Point where the last checkout occurred
checkinServicePointId string ID of the Service Point where the last checkin occurred
checkoutServicePoint object Service Point where the last checkout occurred
checkinServicePoint object Service Point where the last checkin occurred
patronGroupAtCheckout object Patron Group at checkout
feesAndFines object Fees and fines associated with loans
declaredLostDate string Date and time the item was declared lost during this loan
isDcb boolean Indicates whether or not this loan is associated for DCB use case
metadata object Metadata about creation and changes to loan, provided by the server (client should not provide)
View JSON Schema on GitHub

JSON Schema

folio-circulation-loan-schema.json Raw ↑
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "$id": "https://raw.githubusercontent.com/api-evangelist/folio/main/json-schema/folio-circulation-loan-schema.json",
  "title": "Loan",
  "description": "Links the item with the patron and applies certain conditions based on policies",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/folio-mod-circulation-bff-circulationbff-openapi.yml#/components/schemas/circulationLoan",
  "type": "object",
  "properties": {
    "id": {
      "description": "Unique ID (generated UUID) of the loan",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "userId": {
      "description": "ID of the patron the item was lent to. Required for open loans, not required for closed loans (for anonymization).",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "borrower": {
      "description": "Additional information about the borrower of the item, taken from the user referred to by the userId",
      "type": "object",
      "properties": {
        "firstName": {
          "description": "first name of the borrower (read only, defined by the server)",
          "type": "string"
        },
        "lastName": {
          "description": "last name of the borrower (read only, defined by the server)",
          "type": "string"
        },
        "middleName": {
          "description": "middle name of the borrower (read only, defined by the server)",
          "type": "string"
        },
        "barcode": {
          "description": "barcode used to identify the borrower (read only, defined by the server)",
          "type": "string"
        },
        "preferredFirstName": {
          "description": "preferred first name of the borrower (read only, defined by the server)",
          "type": "string"
        },
        "patronGroup": {
          "description": "current patron group of the borrower (read only, defined by the server)",
          "type": "string"
        }
      }
    },
    "proxyUserId": {
      "description": "ID of the user representing a proxy for the patron",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "itemId": {
      "description": "ID of the item lent to the patron",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "loanPolicyId": {
      "description": "ID of last policy used in relation to this loan",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "loanPolicy": {
      "description": "Additional information about the loan policy of the item, taken from the loan loanPolicyId",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of last policy used in relation to this loan (read only, defined by the server)",
          "type": "string"
        }
      }
    },
    "overdueFinePolicyId": {
      "description": "ID of last overdue fine policy used in relation to this loan",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "overdueFinePolicy": {
      "description": "Additional information about the overdue fine policy of the item, taken from the loan overdueFinePolicyId",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of last overdue fine policy used in relation to this loan (read only, defined by the server)",
          "type": "string"
        }
      }
    },
    "lostItemPolicyId": {
      "description": "ID of last lost item policy used in relation to this loan",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "lostItemPolicy": {
      "description": "Additional information about the lost item policy of the item, taken from the loan lostItemPolicyId",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of last lost item policy used in relation to this loan (read only, defined by the server)",
          "type": "string"
        }
      }
    },
    "item": {
      "$ref": "#/$defs/loanItem"
    },
    "itemEffectiveLocationIdAtCheckOut": {
      "description": "The effective location, at the time of checkout, of the item loaned to the patron.",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "status": {
      "description": "Overall status of the loan",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of the status (currently can be any value, values commonly used are Open and Closed)",
          "type": "string"
        }
      }
    },
    "loanDate": {
      "description": "Date and time when the loan began",
      "type": "string",
      "format": "date-time"
    },
    "dueDate": {
      "description": "Date and time when the item is due to be returned",
      "type": "string",
      "format": "date-time"
    },
    "returnDate": {
      "description": "Date and time when the item was returned",
      "type": "string",
      "format": "date-time"
    },
    "systemReturnDate": {
      "description": "Date and time when return was processed",
      "type": "string",
      "format": "date-time"
    },
    "action": {
      "description": "Last action performed on a loan (currently can be any value, values commonly used are checkedout and checkedin)",
      "type": "string"
    },
    "actionComment": {
      "description": "Last action performed on a loan comments",
      "type": "string"
    },
    "renewalCount": {
      "description": "Count of how many times a loan has been renewed (incremented by the client)",
      "type": "integer",
      "minimum": 0
    },
    "dueDateChangedByRecall": {
      "description": "Is due date changed by recall request",
      "type": "boolean"
    },
    "dueDateChangedByNearExpireUser": {
      "description": "Indicates whether or not this loan had its due date modified by a expired user",
      "type": "boolean"
    },
    "dueDateChangedByHold": {
      "description": "Is due date changed by hold request",
      "type": "boolean"
    },
    "checkoutServicePointId": {
      "description": "ID of the Service Point where the last checkout occurred",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "checkinServicePointId": {
      "description": "ID of the Service Point where the last checkin occurred",
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    },
    "checkoutServicePoint": {
      "description": "Service Point where the last checkout occurred",
      "type": "object",
      "properties": {
        "name": {
          "description": "Unique name of the service point",
          "type": "string"
        },
        "code": {
          "description": "Short code for the service point",
          "type": "string"
        },
        "discoveryDisplayName": {
          "description": "Human readable name",
          "type": "string"
        },
        "description": {
          "description": "Service Point description data",
          "type": "string"
        },
        "shelvingLagTime": {
          "description": "Time to shelving",
          "type": "integer"
        },
        "pickupLocation": {
          "description": "Is this a pickup location",
          "type": "boolean"
        },
        "holdShelfClosedLibraryDateManagement": {
          "description": "Hold shelf closed date strategy",
          "type": "string"
        }
      }
    },
    "checkinServicePoint": {
      "description": "Service Point where the last checkin occurred",
      "type": "object",
      "$schema": "http://json-schema.org/draft-04/schema#",
      "properties": {
        "name": {
          "description": "Unique name of the service point",
          "type": "string"
        },
        "code": {
          "description": "Short code for the service point",
          "type": "string"
        },
        "discoveryDisplayName": {
          "description": "Human readable name",
          "type": "string"
        },
        "description": {
          "description": "Service Point description data",
          "type": "string"
        },
        "shelvingLagTime": {
          "description": "Time to shelving",
          "type": "integer"
        },
        "pickupLocation": {
          "description": "Is this a pickup location",
          "type": "boolean"
        },
        "holdShelfClosedLibraryDateManagement": {
          "description": "Hold shelf closed date strategy",
          "type": "string"
        }
      }
    },
    "patronGroupAtCheckout": {
      "description": "Patron Group at checkout",
      "type": "object",
      "properties": {
        "id": {
          "description": "Unique ID (generated UUID) of the patron group",
          "type": "string",
          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
        },
        "name": {
          "description": "Patron group name",
          "type": "string"
        }
      }
    },
    "feesAndFines": {
      "description": "Fees and fines associated with loans",
      "type": "object",
      "properties": {
        "amountRemainingToPay": {
          "type": "number",
          "description": "Total remaining amount due on fees and fines for the loan (read only, defined by the server)"
        }
      }
    },
    "declaredLostDate": {
      "description": "Date and time the item was declared lost during this loan",
      "type": "string",
      "format": "date-time"
    },
    "isDcb": {
      "description": "Indicates whether or not this loan is associated for DCB use case",
      "type": "boolean"
    },
    "metadata": {
      "description": "Metadata about creation and changes to loan, provided by the server (client should not provide)",
      "type": "object",
      "$schema": "http://json-schema.org/draft-04/schema#",
      "id": "metadata.schema",
      "title": "Metadata Schema",
      "properties": {
        "createdDate": {
          "description": "Date and time when the record was created",
          "type": "string",
          "format": "date-time"
        },
        "createdByUserId": {
          "description": "ID of the user who created the record (when available)",
          "type": "string",
          "pattern": "^[a-fA-F0-9]{8}-[a-fA-F]{4}-[a-fA-F]{4}-[a-f]{4}-[a-f]{12}$"
        },
        "createdByUsername": {
          "description": "Username of the user who created the record (when available)",
          "type": "string"
        },
        "updatedDate": {
          "description": "Date and time when the record was last updated",
          "type": "string",
          "format": "date-time"
        },
        "updatedByUserId": {
          "description": "ID of the user who last updated the record (when available)",
          "type": "string",
          "pattern": "^[a-fA-F]{8}-[a-f]{4}-[a-f]{4}-[a-f]{4}-[a-f]{12}$"
        },
        "updatedByUsername": {
          "description": "Username of the user who last updated the record (when available)",
          "type": "string"
        }
      }
    }
  },
  "$defs": {
    "bffSearchItemCallNumberComponents": {
      "type": "object",
      "description": "Elements of a full call number generated from the item or holding",
      "properties": {
        "callNumber": {
          "type": "string",
          "description": "Effective Call Number is an identifier assigned to an item or its holding and associated with the item"
        },
        "prefix": {
          "type": "string",
          "description": "Effective Call Number Prefix is the prefix of the identifier assigned to an item or its holding and associated with the item"
        },
        "suffix": {
          "type": "string",
          "description": "Effective Call Number Suffix is the suffix of the identifier assigned to an item or its holding and associated with the item"
        }
      }
    },
    "bffSearchItemInTransitDestinationServicePoint": {
      "type": "object",
      "description": "Service point an item is intended to be transited to (should only be present when in transit)",
      "properties": {
        "id": {
          "description": "The ID of the service point",
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "description": "Name of the service point",
          "type": "string"
        }
      }
    },
    "loanItem": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "title": "CirculationLoanItem",
      "description": "Circulation Loan Item",
      "properties": {
        "id": {
          "description": "ID of the item",
          "type": "string",
          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
        },
        "tenantId": {
          "description": "Tenant identifier",
          "type": "string"
        },
        "title": {
          "description": "The title of the item lent to the patron",
          "type": "string"
        },
        "callNumber": {
          "description": "Deprecated call number from the holdings record, use callNumberComponents.callNumber instead",
          "type": "string"
        },
        "callNumberComponents": {
          "$ref": "#/$defs/bffSearchItemCallNumberComponents"
        },
        "copyNumber": {
          "description": "Item copy number",
          "type": "string"
        },
        "editions": {
          "description": "The edition statements, imprints and other publication source information",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "description": "The edition statement, imprint and other publication source information",
            "type": "string"
          }
        },
        "materialType": {
          "description": "The material type from the item record",
          "type": "object",
          "properties": {
            "name": {
              "description": "Name of the material type",
              "type": "string"
            }
          }
        },
        "contributors": {
          "description": "Contributors from the instance record",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the contributor",
                "type": "string"
              }
            }
          }
        },
        "primaryContributor": {
          "description": "primary contributor of the item",
          "type": "string"
        },
        "holdingsRecordId": {
          "description": "The ID of the holdings for the item",
          "type": "string",
          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
        },
        "instanceId": {
          "description": "The ID of the instance for the item",
          "type": "string",
          "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
        },
        "instanceHrid": {
          "type": "string",
          "description": "The human readable ID, also called eye readable ID. A system-assigned sequential ID which maps to the Instance ID"
        },
        "barcode": {
          "description": "The barcode of the item",
          "type": "string"
        },
        "location": {
          "description": "The effective location of the item",
          "type": "object",
          "properties": {
            "name": {
              "description": "The name of the location",
              "type": "string"
            }
          }
        },
        "status": {
          "description": "Overall status of the item",
          "type": "object",
          "properties": {
            "name": {
              "description": "Name of the item status",
              "type": "string"
            },
            "date": {
              "type": "string",
              "description": "Date time when status was last changed",
              "format": "date-time"
            }
          }
        },
        "inTransitDestinationServicePointId": {
          "description": "Service point an item is intended to be transited to (should only be present when in transit)",
          "type": "string",
          "format": "uuid"
        },
        "inTransitDestinationServicePoint": {
          "$ref": "#/$defs/bffSearchItemInTransitDestinationServicePoint"
        },
        "enumeration": {
          "description": "Item`s enumeration",
          "type": "string"
        },
        "chronology": {
          "description": "Item`s chronology",
          "type": "string"
        },
        "volume": {
          "description": "Item`s volume",
          "type": "string"
        },
        "displaySummary": {
          "description": "Display summary about the item",
          "type": "string"
        },
        "datesOfPublication": {
          "type": "array",
          "description": "Dates of publication, distribution, etc.",
          "items": {
            "description": "Date (year YYYY) of publication, distribution, etc.",
            "type": "string"
          }
        },
        "accessionNumber": {
          "type": "string",
          "description": "Also called inventory number"
        },
        "physicalDescriptions": {
          "type": "array",
          "description": "Physical description of the described resource, including its extent, dimensions, and such other physical details as a description of any accompanying materials and unit type and size",
          "items": {
            "type": "string"
          }
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/folio-circulation-loan"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.