A patron's own account details. Their information such as name, addresses, email addresses and phone numbers, the consents they have given or withdrawn, and how they want to be notified. Reading and updating these needs the patron ID from a successful login.

6 operations
GET /patron/{patronId}/consent

Get patron consents

Bearer token GetPatronConsents

This includes all the consents that are available for the patron, even if the patron has made a decision on them or not.
This also includes all the consents the patron has made a decision on, i.e. accepted or rejected.

Example request

cURL

curl -X GET "$PLAS_BASE_URL/patron/40218873/consent?version=0.6.7" \
  -H 'Accept: application/json' \
  -H "Authorization: Bearer $PLAS_TOKEN"

JavaScript

const response = await fetch(`${process.env.PLAS_BASE_URL}/patron/40218873/consent?version=0.6.7`, {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": `Bearer ${process.env.PLAS_TOKEN}`,
  },
});
const data = await response.json();

Python

import os
import requests

response = requests.get(
    f"{os.environ['PLAS_BASE_URL']}/patron/40218873/consent",
    params={
        "version": "0.6.7",
    },
    headers={
        "Accept": "application/json",
        "Authorization": f"Bearer {os.environ['PLAS_TOKEN']}",
    },
)
data = response.json()
The host and token are environment variables: PLAS_BASE_URL the provider’s base URL · PLAS_TOKEN an access token.

Parameters

patronIdrequired
path · string

Patron ID from authentication.

Example: 40218873
Shared across operations: version. See the shared contract on the version page.

Responses

200 Success PatronConsentResponseBody
Generated from the schema

Example

{
  "available": [
    {
      "type": "loan_history",
      "version": "2025-01"
    }
  ],
  "evaluated": [
    {
      "given": true,
      "type": "loan_history",
      "version": "2025-01"
    }
  ]
}

Schema

PatronConsentResponseBody

  • availablearray of objectrequired

    The array must only contain one consent of each type.

    Show 2 fieldsHide 2 fields
  • The array must only contain one consent of each type.

    Show 3 fieldsHide 3 fields
400 The list of errors. Errors

Shared response, defined once for the whole API. See the shared contract on the version page.

Generated from the schema

Example

{
  "errors": [
    {
      "code": 200103,
      "info": "200103: invalid/unsupported query parameter value"
    }
  ]
}

Schema

Errors

  • errorsarray of Errorrequiredmin items 1

    The first error should always be the most relevant.

    Show 2 fieldsHide 2 fields
    • codeintegerrequired

      A number representing the type of error.

      List of error codes:

      • \<error code\>: \<error description\>
      • 500: System error
      • 600: Unsupported Open Library API version
      • 10001: Endpoint disabled
      • 71001: Consent has not been given for 'loan history'
      • 100001: Wrong patron identifier, password or pin code
      • 100011: New password or pin code rejected, because it does not meet the provider's requirements
      • 100013: The provider does not let the patron change the given credential
      • 100023: Patron ID not found
      • 100101: Patron could not be deleted, because the patron has something unresolved issue with the library (this could be anything from a loan to a fee, and so on ...)
      • 100211: maxNumberOfEmailAddresses exceeded
      • 100215: maxNumberOfPhoneNumbers exceeded
      • 100221: Pickup location cannot contain sections
      • 100411: Updating patron consent failed
      • 100611: Updating patron notification settings failed
      • 101001: Reservation ID not found
      • 101047: Branch ID cannot be used as pick up branch
      • 101053: Section ID cannot be used as pick up branch
      • 102001: Loan ID not found
      • 102301: Loan not renewable, because it is an interlibrary loan
      • 102311: Loan not renewable, because it is reserved
      • 110001: Branch ID not found
      • 200001: Publication ID not found
      • 200077: ui language not supported
      • 200101: missing required query parameter
      • 200103: invalid/unsupported query parameter value
      • 300001: Initialize payment should not be used
      • 300005: Initialize payment should be used
      • 300009: Payment method not supported
      • 300013: Payment method does not support partial payment
      • 300301: Finalized payment can not de changed
      • 300311: FinalizePaymentRequest.fees contains fees with the same ID
      • 310001: Loan history ID not found
      • 310011: Loan history ID already exists
      • 330001: List ID not found
      • 330011: List ID already exists
      • 330101: List item ID not found
      • 330111: List item ID already exists

      One of: 500 · 600 · 10001 · 71001 · 100001 · 100011 · 100013 · 100023 · 100101 · 100211 · 100215 · 100221 · 100411 · 100611 · 101001 · 101047 · 101053 · 102001 · 102301 · 102311 · 110001 · 200001 · 200077 · 200101 · 200103 · 300001 · 300005 · 300009 · 300013 · 300301 · 300311 · 310001 · 310011 · 330001 · 330011 · 330101 · 330111

    • infostringrequired

      Starts with the text matching the error code field (defined above), and a describing text could be added.

401 Bearer token invalid, missing, or expired.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

404 Resource not found.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

PATCH /patron/{patronId}/consent

Update one or more patron consent(s)

Bearer token UpdatePatronConsent

Update patron consents.

Only the consents that are present in the body will be updated.
Other consents will not be updated.

The update is an atomic operation. If one consent fails to update, all consent updates in the request will be rolled back.

All consents are returned in the response, not only the updated consents.

Example request

cURL

curl -X PATCH "$PLAS_BASE_URL/patron/40218873/consent?version=0.6.7" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $PLAS_TOKEN" \
  -d '{
  "consents": [
    {
      "given": true,
      "type": "loan_history",
      "version": "2025-01"
    }
  ]
}'

JavaScript

const response = await fetch(`${process.env.PLAS_BASE_URL}/patron/40218873/consent?version=0.6.7`, {
  method: "PATCH",
  headers: {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": `Bearer ${process.env.PLAS_TOKEN}`,
  },
  body: JSON.stringify({
    "consents": [
      {
        "given": true,
        "type": "loan_history",
        "version": "2025-01"
      }
    ]
  }),
});
const data = await response.json();

Python

import os
import requests

response = requests.patch(
    f"{os.environ['PLAS_BASE_URL']}/patron/40218873/consent",
    params={
        "version": "0.6.7",
    },
    headers={
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": f"Bearer {os.environ['PLAS_TOKEN']}",
    },
    json={
        "consents": [
            {
                "given": True,
                "type": "loan_history",
                "version": "2025-01",
            },
        ],
    },
)
data = response.json()
The host and token are environment variables: PLAS_BASE_URL the provider’s base URL · PLAS_TOKEN an access token.

Parameters

patronIdrequired
path · string

Patron ID from authentication.

Example: 40218873
Shared across operations: version. See the shared contract on the version page.

Request body

application/json · required · UpdatePatronConsentRequestBody

Responses

200 Success UpdatePatronConsentResponseBody
Generated from the schema

Example

{
  "available": [
    {
      "type": "loan_history",
      "version": "2025-01"
    }
  ],
  "evaluated": [
    {
      "given": true,
      "type": "loan_history",
      "version": "2025-01"
    }
  ]
}

Schema

UpdatePatronConsentResponseBody

  • availablearray of objectrequired

    The array must only contain one consent of each type.

    Show 2 fieldsHide 2 fields
  • The array must only contain one consent of each type.

    Show 3 fieldsHide 3 fields
400 The list of errors. Errors

Shared response, defined once for the whole API. See the shared contract on the version page.

Generated from the schema

Example

{
  "errors": [
    {
      "code": 200103,
      "info": "200103: invalid/unsupported query parameter value"
    }
  ]
}

Schema

Errors

  • errorsarray of Errorrequiredmin items 1

    The first error should always be the most relevant.

    Show 2 fieldsHide 2 fields
    • codeintegerrequired

      A number representing the type of error.

      List of error codes:

      • \<error code\>: \<error description\>
      • 500: System error
      • 600: Unsupported Open Library API version
      • 10001: Endpoint disabled
      • 71001: Consent has not been given for 'loan history'
      • 100001: Wrong patron identifier, password or pin code
      • 100011: New password or pin code rejected, because it does not meet the provider's requirements
      • 100013: The provider does not let the patron change the given credential
      • 100023: Patron ID not found
      • 100101: Patron could not be deleted, because the patron has something unresolved issue with the library (this could be anything from a loan to a fee, and so on ...)
      • 100211: maxNumberOfEmailAddresses exceeded
      • 100215: maxNumberOfPhoneNumbers exceeded
      • 100221: Pickup location cannot contain sections
      • 100411: Updating patron consent failed
      • 100611: Updating patron notification settings failed
      • 101001: Reservation ID not found
      • 101047: Branch ID cannot be used as pick up branch
      • 101053: Section ID cannot be used as pick up branch
      • 102001: Loan ID not found
      • 102301: Loan not renewable, because it is an interlibrary loan
      • 102311: Loan not renewable, because it is reserved
      • 110001: Branch ID not found
      • 200001: Publication ID not found
      • 200077: ui language not supported
      • 200101: missing required query parameter
      • 200103: invalid/unsupported query parameter value
      • 300001: Initialize payment should not be used
      • 300005: Initialize payment should be used
      • 300009: Payment method not supported
      • 300013: Payment method does not support partial payment
      • 300301: Finalized payment can not de changed
      • 300311: FinalizePaymentRequest.fees contains fees with the same ID
      • 310001: Loan history ID not found
      • 310011: Loan history ID already exists
      • 330001: List ID not found
      • 330011: List ID already exists
      • 330101: List item ID not found
      • 330111: List item ID already exists

      One of: 500 · 600 · 10001 · 71001 · 100001 · 100011 · 100013 · 100023 · 100101 · 100211 · 100215 · 100221 · 100411 · 100611 · 101001 · 101047 · 101053 · 102001 · 102301 · 102311 · 110001 · 200001 · 200077 · 200101 · 200103 · 300001 · 300005 · 300009 · 300013 · 300301 · 300311 · 310001 · 310011 · 330001 · 330011 · 330101 · 330111

    • infostringrequired

      Starts with the text matching the error code field (defined above), and a describing text could be added.

401 Bearer token invalid, missing, or expired.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

404 Resource not found.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

GET /patron/{patronId}/information

Get patron information

Bearer token GetPatronInformation

Retrieve patron information

Example request

cURL

curl -X GET "$PLAS_BASE_URL/patron/40218873/information?version=0.6.7" \
  -H 'Accept: application/json' \
  -H "Authorization: Bearer $PLAS_TOKEN"

JavaScript

const response = await fetch(`${process.env.PLAS_BASE_URL}/patron/40218873/information?version=0.6.7`, {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": `Bearer ${process.env.PLAS_TOKEN}`,
  },
});
const data = await response.json();

Python

import os
import requests

response = requests.get(
    f"{os.environ['PLAS_BASE_URL']}/patron/40218873/information",
    params={
        "version": "0.6.7",
    },
    headers={
        "Accept": "application/json",
        "Authorization": f"Bearer {os.environ['PLAS_TOKEN']}",
    },
)
data = response.json()
The host and token are environment variables: PLAS_BASE_URL the provider’s base URL · PLAS_TOKEN an access token.

Parameters

patronIdrequired
path · string

Patron ID from authentication

Example: 40218873
Shared across operations: version. See the shared contract on the version page.

Responses

200 Success PatronInformationResponseBody
Generated from the schema

Example

{
  "patron": {
    "address": {
      "city": "Nordby",
      "country": "Norway",
      "postalCode": "0182",
      "street": "Storgata 12"
    },
    "emails": [
      {
        "default": true,
        "email": "kari.nordmann@example.no",
        "verified": "yes"
      }
    ],
    "fullName": "Kari Nordmann",
    "givenName": "Kari",
    "identifiers": [
      {
        "type": "local",
        "value": "N00012345"
      }
    ],
    "patronId": "40218873",
    "permissions": [
      {
        "reason": "The patron has unpaid fees above the library’s limit.",
        "status": "allowed",
        "type": "off_hours"
      }
    ],
    "phoneNumbers": [
      {
        "default": true,
        "number": "+4791234567",
        "type": "mobile",
        "verified": "yes"
      }
    ],
    "pickupLocation": {
      "branchId": "nordby-main",
      "branchName": "Nordby Main Library",
      "sections": [
        {
          "id": "nordby-main-children",
          "name": "Children’s department",
          "type": "department"
        }
      ]
    },
    "reservation": {
      "postpone": {
        "fromDate": "2025-03-01",
        "toDate": "2025-03-31"
      }
    },
    "surname": "Nordmann"
  }
}

Schema

PatronInformationResponseBody

  • patronPatronrequired
    Show 11 fieldsHide 11 fields
    • Show 4 fieldsHide 4 fields
      • citystringrequired

        This field refers to the city, town, or locality where the address is located.

      • countrystring

        This field specifies the name of the country where the address is located.

      • postalCodestring

        This field represents the numeric or alphanumeric code assigned to a specific area for efficient mail sorting and delivery.

      • streetstringrequired

        This field represents the name of the road, street, or thoroughfare where the address is located.
        The field should also contain the building number assigned to a building at the location, and the field should also contain identifiers such as apartment numbers, suite numbers, or floor numbers.

    • emailsarray of PatronEmailrequired

      The size of this array must not exceed (if specified) the ´maxNumberOfEmailAddresses´ value given in the configuration.

      Show 3 fieldsHide 3 fields
      • defaultboolean

        At most one email can de marked as default.

      • emailstringrequired

        Patron email, following RFC 5322.

      • verifiedstring

        Tells the state of verification of the email.

        One of: yes · no · pending

    • fullNamestringrequired

      FullName is always provided, but givenName and surname are only specified if the data is organized in such a detailed manner.

    • givenNamestring

      Patron's given name.

    • Show 2 fieldsHide 2 fields
      • A type identifier that tells which type of identifier is used.

        This is an open enum, so values other than the known ones are allowed. GET /configuration says which types the provider accepts for each flow, in patron.login.identifierTypes, patron.registration.identifierTypes and patron.deletion.identifierTypes.

        One of: local · email · phone · norway_national_library_card · norway_national_birth_number · denmark_cpr

        See PatronIdentifierType in the schema index

      • valuestringrequired

        Identifier value. This information may be sensitive.

    • patronIdstringrequired

      Unique patron identifier (unique for that customer).

    • permissionsarray of object

      This is a list of activities, locations, etc. that the patron is either allowed or blocked from accessing.

      Show 3 fieldsHide 3 fields
      • reasonstring

        Human readable text that explains why the patron is blocked.

      • statusstringrequired

        One of: allowed · blocked

      • typestringrequired

        Some suggested access types:

        • off_hours Access to the libraries outside normal opening hours.
        • self_service Block checkout and checkin on self service clients.
        • exclusion Patron is excluded from all library uses.
    • phoneNumbersarray of PatronPhoneNumberrequired

      The size of this array must not exceed (if specified) the ´maxNumberOfPhoneNumbers´ value given in the configuration.

      Show 4 fieldsHide 4 fields
      • defaultbooleanrequired

        At most one phone number can be marked as default.

      • numberstringrequiredpattern ^\+[1-9]\d{1,14}$

        The phone number, in ITU standard E.164 format.

      • typestringrequired

        This tells which type of phone the number is associated with

        One of: mobile · landline

      • verifiedstring

        Tells the state of verification of the phone number.

        One of: yes · no · pending

    • pickupLocationPickupLocationrequired

      The object tells where a reservation item can be picked up.

      This is the default pickup location for the patron.

      Show 3 fieldsHide 3 fields
    • Show 1 fieldHide 1 field
      • postponeobject

        This describes an interval (possibly an open interval, but only in one end) where the patron is not interested in reservations being fulfilled, e.g. while on vacation.

    • surnamestring

      Patron surname.

400 The list of errors. Errors

Shared response, defined once for the whole API. See the shared contract on the version page.

Generated from the schema

Example

{
  "errors": [
    {
      "code": 200103,
      "info": "200103: invalid/unsupported query parameter value"
    }
  ]
}

Schema

Errors

  • errorsarray of Errorrequiredmin items 1

    The first error should always be the most relevant.

    Show 2 fieldsHide 2 fields
    • codeintegerrequired

      A number representing the type of error.

      List of error codes:

      • \<error code\>: \<error description\>
      • 500: System error
      • 600: Unsupported Open Library API version
      • 10001: Endpoint disabled
      • 71001: Consent has not been given for 'loan history'
      • 100001: Wrong patron identifier, password or pin code
      • 100011: New password or pin code rejected, because it does not meet the provider's requirements
      • 100013: The provider does not let the patron change the given credential
      • 100023: Patron ID not found
      • 100101: Patron could not be deleted, because the patron has something unresolved issue with the library (this could be anything from a loan to a fee, and so on ...)
      • 100211: maxNumberOfEmailAddresses exceeded
      • 100215: maxNumberOfPhoneNumbers exceeded
      • 100221: Pickup location cannot contain sections
      • 100411: Updating patron consent failed
      • 100611: Updating patron notification settings failed
      • 101001: Reservation ID not found
      • 101047: Branch ID cannot be used as pick up branch
      • 101053: Section ID cannot be used as pick up branch
      • 102001: Loan ID not found
      • 102301: Loan not renewable, because it is an interlibrary loan
      • 102311: Loan not renewable, because it is reserved
      • 110001: Branch ID not found
      • 200001: Publication ID not found
      • 200077: ui language not supported
      • 200101: missing required query parameter
      • 200103: invalid/unsupported query parameter value
      • 300001: Initialize payment should not be used
      • 300005: Initialize payment should be used
      • 300009: Payment method not supported
      • 300013: Payment method does not support partial payment
      • 300301: Finalized payment can not de changed
      • 300311: FinalizePaymentRequest.fees contains fees with the same ID
      • 310001: Loan history ID not found
      • 310011: Loan history ID already exists
      • 330001: List ID not found
      • 330011: List ID already exists
      • 330101: List item ID not found
      • 330111: List item ID already exists

      One of: 500 · 600 · 10001 · 71001 · 100001 · 100011 · 100013 · 100023 · 100101 · 100211 · 100215 · 100221 · 100411 · 100611 · 101001 · 101047 · 101053 · 102001 · 102301 · 102311 · 110001 · 200001 · 200077 · 200101 · 200103 · 300001 · 300005 · 300009 · 300013 · 300301 · 300311 · 310001 · 310011 · 330001 · 330011 · 330101 · 330111

    • infostringrequired

      Starts with the text matching the error code field (defined above), and a describing text could be added.

401 Bearer token invalid, missing, or expired.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

404 Resource not found.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

PATCH /patron/{patronId}/information

Update patron information

Bearer token UpdatePatronInformation

Update patron information.

Important: If a field is missing on the outermost level of the json body (like pickupLocation, emails, phoneNumbers, etc.), the field value is not updated in the LMS.

Example request

cURL

curl -X PATCH "$PLAS_BASE_URL/patron/40218873/information?version=0.6.7" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $PLAS_TOKEN" \
  -d '{
  "address": {
    "city": "Nordby",
    "country": "Norway",
    "postalCode": "0182",
    "street": "Storgata 12"
  },
  "emails": [
    {
      "default": true,
      "email": "kari.nordmann@example.no"
    }
  ],
  "phoneNumbers": [
    {
      "default": true,
      "number": "+4791234567",
      "type": "mobile"
    }
  ],
  "pickupLocation": {
    "branchId": "nordby-main",
    "sections": [
      {
        "id": "nordby-main-children",
        "type": "department"
      }
    ]
  },
  "reservation": {
    "postpone": {
      "fromDate": "2025-03-01",
      "toDate": "2025-03-31"
    }
  }
}'

JavaScript

const response = await fetch(`${process.env.PLAS_BASE_URL}/patron/40218873/information?version=0.6.7`, {
  method: "PATCH",
  headers: {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": `Bearer ${process.env.PLAS_TOKEN}`,
  },
  body: JSON.stringify({
    "address": {
      "city": "Nordby",
      "country": "Norway",
      "postalCode": "0182",
      "street": "Storgata 12"
    },
    "emails": [
      {
        "default": true,
        "email": "kari.nordmann@example.no"
      }
    ],
    "phoneNumbers": [
      {
        "default": true,
        "number": "+4791234567",
        "type": "mobile"
      }
    ],
    "pickupLocation": {
      "branchId": "nordby-main",
      "sections": [
        {
          "id": "nordby-main-children",
          "type": "department"
        }
      ]
    },
    "reservation": {
      "postpone": {
        "fromDate": "2025-03-01",
        "toDate": "2025-03-31"
      }
    }
  }),
});
const data = await response.json();

Python

import os
import requests

response = requests.patch(
    f"{os.environ['PLAS_BASE_URL']}/patron/40218873/information",
    params={
        "version": "0.6.7",
    },
    headers={
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": f"Bearer {os.environ['PLAS_TOKEN']}",
    },
    json={
        "address": {
            "city": "Nordby",
            "country": "Norway",
            "postalCode": "0182",
            "street": "Storgata 12",
        },
        "emails": [
            {
                "default": True,
                "email": "kari.nordmann@example.no",
            },
        ],
        "phoneNumbers": [
            {
                "default": True,
                "number": "+4791234567",
                "type": "mobile",
            },
        ],
        "pickupLocation": {
            "branchId": "nordby-main",
            "sections": [
                {
                    "id": "nordby-main-children",
                    "type": "department",
                },
            ],
        },
        "reservation": {
            "postpone": {
                "fromDate": "2025-03-01",
                "toDate": "2025-03-31",
            },
        },
    },
)
data = response.json()
The host and token are environment variables: PLAS_BASE_URL the provider’s base URL · PLAS_TOKEN an access token.

Parameters

patronIdrequired
path · string

Patron ID from authentication

Example: 40218873
Shared across operations: version. See the shared contract on the version page.

Request body

application/json · required · UpdatePatronInformationRequestBody
  • Show 4 fieldsHide 4 fields
    • citystringrequired

      This field refers to the city, town, or locality where the address is located.

    • countrystring

      This field specifies the name of the country where the address is located.

    • postalCodestring

      This field represents the numeric or alphanumeric code assigned to a specific area for efficient mail sorting and delivery.

    • streetstringrequired

      This field represents the name of the road, street, or thoroughfare where the address is located.
      The field should also contain the building number assigned to a building at the location, and the field should also contain identifiers such as apartment numbers, suite numbers, or floor numbers.

  • The size of this array must not exceed (if specified) the ´maxNumberOfEmailAddresses´ value given in the configuration.

    Show 2 fieldsHide 2 fields
    • defaultboolean

      At most one email can de marked as default.

    • emailstringrequired

      Patron email, following RFC 5322.

  • The size of this array must not exceed (if specified) the ´maxNumberOfPhoneNumbers´ value given in the configuration.

    Show 3 fieldsHide 3 fields
    • defaultbooleanrequired

      At most one phone number can be marked as default.

    • numberstringrequiredpattern ^\+[1-9]\d{1,14}$

      The phone number, in ITU standard E.164 format.

    • typestringrequired

      This tells which type of phone the number is associated with

      One of: mobile · landline

  • Show 2 fieldsHide 2 fields
    • branchIdstringrequired

      The branch ID where a reservation should be picked up.

    • This are specifying the location more precisely.

      Show 2 fieldsHide 2 fields
      • idstringrequired

        This is the section (element) ID

      • typestringrequired

        This should be the section type of the section (element) ID.

  • Show 1 fieldHide 1 field
    • postponeobject

      This describes an interval (possibly an open interval, but only in one end) where the patron is not interested in reservations being fulfilled, e.g. while on vacation.

      Show 2 fieldsHide 2 fields
      • fromDatestring (date)

        The date is included in the interval.
        If the field is missing, it means it is an open interval, i.e. the patron's reservations are postponed until the given toDate.

      • toDatestring (date)

        The date is included in the interval.
        If the field is missing, it means it is an open interval, i.e. the patron's reservations are postponed from fromDate until forever.

Responses

200 Success UpdatePatronInformationResponseBody
Generated from the schema

Example

{
  "patron": {
    "address": {
      "city": "Nordby",
      "country": "Norway",
      "postalCode": "0182",
      "street": "Storgata 12"
    },
    "emails": [
      {
        "default": true,
        "email": "kari.nordmann@example.no",
        "verified": "yes"
      }
    ],
    "fullName": "Kari Nordmann",
    "givenName": "Kari",
    "identifiers": [
      {
        "type": "local",
        "value": "N00012345"
      }
    ],
    "patronId": "40218873",
    "permissions": [
      {
        "reason": "The patron has unpaid fees above the library’s limit.",
        "status": "allowed",
        "type": "off_hours"
      }
    ],
    "phoneNumbers": [
      {
        "default": true,
        "number": "+4791234567",
        "type": "mobile",
        "verified": "yes"
      }
    ],
    "pickupLocation": {
      "branchId": "nordby-main",
      "branchName": "Nordby Main Library",
      "sections": [
        {
          "id": "nordby-main-children",
          "name": "Children’s department",
          "type": "department"
        }
      ]
    },
    "reservation": {
      "postpone": {
        "fromDate": "2025-03-01",
        "toDate": "2025-03-31"
      }
    },
    "surname": "Nordmann"
  }
}

Schema

UpdatePatronInformationResponseBody

  • patronPatronrequired
    Show 11 fieldsHide 11 fields
    • Show 4 fieldsHide 4 fields
      • citystringrequired

        This field refers to the city, town, or locality where the address is located.

      • countrystring

        This field specifies the name of the country where the address is located.

      • postalCodestring

        This field represents the numeric or alphanumeric code assigned to a specific area for efficient mail sorting and delivery.

      • streetstringrequired

        This field represents the name of the road, street, or thoroughfare where the address is located.
        The field should also contain the building number assigned to a building at the location, and the field should also contain identifiers such as apartment numbers, suite numbers, or floor numbers.

    • emailsarray of PatronEmailrequired

      The size of this array must not exceed (if specified) the ´maxNumberOfEmailAddresses´ value given in the configuration.

      Show 3 fieldsHide 3 fields
      • defaultboolean

        At most one email can de marked as default.

      • emailstringrequired

        Patron email, following RFC 5322.

      • verifiedstring

        Tells the state of verification of the email.

        One of: yes · no · pending

    • fullNamestringrequired

      FullName is always provided, but givenName and surname are only specified if the data is organized in such a detailed manner.

    • givenNamestring

      Patron's given name.

    • Show 2 fieldsHide 2 fields
      • A type identifier that tells which type of identifier is used.

        This is an open enum, so values other than the known ones are allowed. GET /configuration says which types the provider accepts for each flow, in patron.login.identifierTypes, patron.registration.identifierTypes and patron.deletion.identifierTypes.

        One of: local · email · phone · norway_national_library_card · norway_national_birth_number · denmark_cpr

        See PatronIdentifierType in the schema index

      • valuestringrequired

        Identifier value. This information may be sensitive.

    • patronIdstringrequired

      Unique patron identifier (unique for that customer).

    • permissionsarray of object

      This is a list of activities, locations, etc. that the patron is either allowed or blocked from accessing.

      Show 3 fieldsHide 3 fields
      • reasonstring

        Human readable text that explains why the patron is blocked.

      • statusstringrequired

        One of: allowed · blocked

      • typestringrequired

        Some suggested access types:

        • off_hours Access to the libraries outside normal opening hours.
        • self_service Block checkout and checkin on self service clients.
        • exclusion Patron is excluded from all library uses.
    • phoneNumbersarray of PatronPhoneNumberrequired

      The size of this array must not exceed (if specified) the ´maxNumberOfPhoneNumbers´ value given in the configuration.

      Show 4 fieldsHide 4 fields
      • defaultbooleanrequired

        At most one phone number can be marked as default.

      • numberstringrequiredpattern ^\+[1-9]\d{1,14}$

        The phone number, in ITU standard E.164 format.

      • typestringrequired

        This tells which type of phone the number is associated with

        One of: mobile · landline

      • verifiedstring

        Tells the state of verification of the phone number.

        One of: yes · no · pending

    • pickupLocationPickupLocationrequired

      The object tells where a reservation item can be picked up.

      This is the default pickup location for the patron.

      Show 3 fieldsHide 3 fields
    • Show 1 fieldHide 1 field
      • postponeobject

        This describes an interval (possibly an open interval, but only in one end) where the patron is not interested in reservations being fulfilled, e.g. while on vacation.

    • surnamestring

      Patron surname.

202 Accepted, meaning that the request of a patron update was received, but processing will be done (or completed) later. UpdatePatronInformationRequestAcceptedResponseBody
Generated from the schema

Example

{
  "ticket": "4f1c2e9a"
}

Schema

UpdatePatronInformationRequestAcceptedResponseBody

  • ticketstringrequired

    Can be used for debugging.

400 The list of errors. Errors

Shared response, defined once for the whole API. See the shared contract on the version page.

Generated from the schema

Example

{
  "errors": [
    {
      "code": 200103,
      "info": "200103: invalid/unsupported query parameter value"
    }
  ]
}

Schema

Errors

  • errorsarray of Errorrequiredmin items 1

    The first error should always be the most relevant.

    Show 2 fieldsHide 2 fields
    • codeintegerrequired

      A number representing the type of error.

      List of error codes:

      • \<error code\>: \<error description\>
      • 500: System error
      • 600: Unsupported Open Library API version
      • 10001: Endpoint disabled
      • 71001: Consent has not been given for 'loan history'
      • 100001: Wrong patron identifier, password or pin code
      • 100011: New password or pin code rejected, because it does not meet the provider's requirements
      • 100013: The provider does not let the patron change the given credential
      • 100023: Patron ID not found
      • 100101: Patron could not be deleted, because the patron has something unresolved issue with the library (this could be anything from a loan to a fee, and so on ...)
      • 100211: maxNumberOfEmailAddresses exceeded
      • 100215: maxNumberOfPhoneNumbers exceeded
      • 100221: Pickup location cannot contain sections
      • 100411: Updating patron consent failed
      • 100611: Updating patron notification settings failed
      • 101001: Reservation ID not found
      • 101047: Branch ID cannot be used as pick up branch
      • 101053: Section ID cannot be used as pick up branch
      • 102001: Loan ID not found
      • 102301: Loan not renewable, because it is an interlibrary loan
      • 102311: Loan not renewable, because it is reserved
      • 110001: Branch ID not found
      • 200001: Publication ID not found
      • 200077: ui language not supported
      • 200101: missing required query parameter
      • 200103: invalid/unsupported query parameter value
      • 300001: Initialize payment should not be used
      • 300005: Initialize payment should be used
      • 300009: Payment method not supported
      • 300013: Payment method does not support partial payment
      • 300301: Finalized payment can not de changed
      • 300311: FinalizePaymentRequest.fees contains fees with the same ID
      • 310001: Loan history ID not found
      • 310011: Loan history ID already exists
      • 330001: List ID not found
      • 330011: List ID already exists
      • 330101: List item ID not found
      • 330111: List item ID already exists

      One of: 500 · 600 · 10001 · 71001 · 100001 · 100011 · 100013 · 100023 · 100101 · 100211 · 100215 · 100221 · 100411 · 100611 · 101001 · 101047 · 101053 · 102001 · 102301 · 102311 · 110001 · 200001 · 200077 · 200101 · 200103 · 300001 · 300005 · 300009 · 300013 · 300301 · 300311 · 310001 · 310011 · 330001 · 330011 · 330101 · 330111

    • infostringrequired

      Starts with the text matching the error code field (defined above), and a describing text could be added.

401 Bearer token invalid, missing, or expired.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

404 Resource not found.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

GET /patron/{patronId}/notification-settings

Get patron notifications settings

Bearer token GetPatronNotificationSettings

Retrieve the patron's notification settings

Example request

cURL

curl -X GET "$PLAS_BASE_URL/patron/40218873/notification-settings?version=0.6.7" \
  -H 'Accept: application/json' \
  -H "Authorization: Bearer $PLAS_TOKEN"

JavaScript

const response = await fetch(`${process.env.PLAS_BASE_URL}/patron/40218873/notification-settings?version=0.6.7`, {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": `Bearer ${process.env.PLAS_TOKEN}`,
  },
});
const data = await response.json();

Python

import os
import requests

response = requests.get(
    f"{os.environ['PLAS_BASE_URL']}/patron/40218873/notification-settings",
    params={
        "version": "0.6.7",
    },
    headers={
        "Accept": "application/json",
        "Authorization": f"Bearer {os.environ['PLAS_TOKEN']}",
    },
)
data = response.json()
The host and token are environment variables: PLAS_BASE_URL the provider’s base URL · PLAS_TOKEN an access token.

Parameters

patronIdrequired
path · string

Patron ID from authentication

Example: 40218873
Shared across operations: version. See the shared contract on the version page.

Responses

200 Success PatronNotificationSettingsResponseBody
Generated from the schema

Example

{
  "notificationSettings": [
    {
      "category": "reservations",
      "delivery": {
        "chosen": [
          {
            "method": "sms"
          }
        ],
        "methods": [
          {
            "method": "sms"
          }
        ]
      },
      "name": "Kari Nordmann",
      "type": "reservation_ready"
    }
  ]
}

Schema

PatronNotificationSettingsResponseBody

400 The list of errors. Errors

Shared response, defined once for the whole API. See the shared contract on the version page.

Generated from the schema

Example

{
  "errors": [
    {
      "code": 200103,
      "info": "200103: invalid/unsupported query parameter value"
    }
  ]
}

Schema

Errors

  • errorsarray of Errorrequiredmin items 1

    The first error should always be the most relevant.

    Show 2 fieldsHide 2 fields
    • codeintegerrequired

      A number representing the type of error.

      List of error codes:

      • \<error code\>: \<error description\>
      • 500: System error
      • 600: Unsupported Open Library API version
      • 10001: Endpoint disabled
      • 71001: Consent has not been given for 'loan history'
      • 100001: Wrong patron identifier, password or pin code
      • 100011: New password or pin code rejected, because it does not meet the provider's requirements
      • 100013: The provider does not let the patron change the given credential
      • 100023: Patron ID not found
      • 100101: Patron could not be deleted, because the patron has something unresolved issue with the library (this could be anything from a loan to a fee, and so on ...)
      • 100211: maxNumberOfEmailAddresses exceeded
      • 100215: maxNumberOfPhoneNumbers exceeded
      • 100221: Pickup location cannot contain sections
      • 100411: Updating patron consent failed
      • 100611: Updating patron notification settings failed
      • 101001: Reservation ID not found
      • 101047: Branch ID cannot be used as pick up branch
      • 101053: Section ID cannot be used as pick up branch
      • 102001: Loan ID not found
      • 102301: Loan not renewable, because it is an interlibrary loan
      • 102311: Loan not renewable, because it is reserved
      • 110001: Branch ID not found
      • 200001: Publication ID not found
      • 200077: ui language not supported
      • 200101: missing required query parameter
      • 200103: invalid/unsupported query parameter value
      • 300001: Initialize payment should not be used
      • 300005: Initialize payment should be used
      • 300009: Payment method not supported
      • 300013: Payment method does not support partial payment
      • 300301: Finalized payment can not de changed
      • 300311: FinalizePaymentRequest.fees contains fees with the same ID
      • 310001: Loan history ID not found
      • 310011: Loan history ID already exists
      • 330001: List ID not found
      • 330011: List ID already exists
      • 330101: List item ID not found
      • 330111: List item ID already exists

      One of: 500 · 600 · 10001 · 71001 · 100001 · 100011 · 100013 · 100023 · 100101 · 100211 · 100215 · 100221 · 100411 · 100611 · 101001 · 101047 · 101053 · 102001 · 102301 · 102311 · 110001 · 200001 · 200077 · 200101 · 200103 · 300001 · 300005 · 300009 · 300013 · 300301 · 300311 · 310001 · 310011 · 330001 · 330011 · 330101 · 330111

    • infostringrequired

      Starts with the text matching the error code field (defined above), and a describing text could be added.

401 Bearer token invalid, missing, or expired.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

404 Resource not found.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

PATCH /patron/{patronId}/notification-settings

Update one or more patron notification settings

Bearer token UpdatePatronNotificationSettings

Update patron notification settings.

Only the notification settings that are present in the body will be updated.
Other notification settings will not be updated.

The update is an atomic operation. If one notification setting fails to update, all notification settings updates in the request will be rolled back.

All notification settings are returned in the response, not only the updated notification settings.

Example request

cURL

curl -X PATCH "$PLAS_BASE_URL/patron/40218873/notification-settings?version=0.6.7" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $PLAS_TOKEN" \
  -d '{
  "notificationSettings": [
    {
      "chosen": [
        {
          "method": "sms"
        }
      ],
      "type": "reservation_ready"
    }
  ]
}'

JavaScript

const response = await fetch(`${process.env.PLAS_BASE_URL}/patron/40218873/notification-settings?version=0.6.7`, {
  method: "PATCH",
  headers: {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": `Bearer ${process.env.PLAS_TOKEN}`,
  },
  body: JSON.stringify({
    "notificationSettings": [
      {
        "chosen": [
          {
            "method": "sms"
          }
        ],
        "type": "reservation_ready"
      }
    ]
  }),
});
const data = await response.json();

Python

import os
import requests

response = requests.patch(
    f"{os.environ['PLAS_BASE_URL']}/patron/40218873/notification-settings",
    params={
        "version": "0.6.7",
    },
    headers={
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": f"Bearer {os.environ['PLAS_TOKEN']}",
    },
    json={
        "notificationSettings": [
            {
                "chosen": [
                    {
                        "method": "sms",
                    },
                ],
                "type": "reservation_ready",
            },
        ],
    },
)
data = response.json()
The host and token are environment variables: PLAS_BASE_URL the provider’s base URL · PLAS_TOKEN an access token.

Parameters

patronIdrequired
path · string

Patron ID from authentication

Example: 40218873
Shared across operations: version. See the shared contract on the version page.

Request body

application/json · required · UpdatePatronNotificationSettingsRequestBody

Responses

200 Success UpdatePatronNotificationSettingsResponseBody
Generated from the schema

Example

{
  "notificationSettings": [
    {
      "category": "reservations",
      "delivery": {
        "chosen": [
          {
            "method": "sms"
          }
        ],
        "methods": [
          {
            "method": "sms"
          }
        ]
      },
      "name": "Kari Nordmann",
      "type": "reservation_ready"
    }
  ]
}

Schema

UpdatePatronNotificationSettingsResponseBody

400 The list of errors. Errors

Shared response, defined once for the whole API. See the shared contract on the version page.

Generated from the schema

Example

{
  "errors": [
    {
      "code": 200103,
      "info": "200103: invalid/unsupported query parameter value"
    }
  ]
}

Schema

Errors

  • errorsarray of Errorrequiredmin items 1

    The first error should always be the most relevant.

    Show 2 fieldsHide 2 fields
    • codeintegerrequired

      A number representing the type of error.

      List of error codes:

      • \<error code\>: \<error description\>
      • 500: System error
      • 600: Unsupported Open Library API version
      • 10001: Endpoint disabled
      • 71001: Consent has not been given for 'loan history'
      • 100001: Wrong patron identifier, password or pin code
      • 100011: New password or pin code rejected, because it does not meet the provider's requirements
      • 100013: The provider does not let the patron change the given credential
      • 100023: Patron ID not found
      • 100101: Patron could not be deleted, because the patron has something unresolved issue with the library (this could be anything from a loan to a fee, and so on ...)
      • 100211: maxNumberOfEmailAddresses exceeded
      • 100215: maxNumberOfPhoneNumbers exceeded
      • 100221: Pickup location cannot contain sections
      • 100411: Updating patron consent failed
      • 100611: Updating patron notification settings failed
      • 101001: Reservation ID not found
      • 101047: Branch ID cannot be used as pick up branch
      • 101053: Section ID cannot be used as pick up branch
      • 102001: Loan ID not found
      • 102301: Loan not renewable, because it is an interlibrary loan
      • 102311: Loan not renewable, because it is reserved
      • 110001: Branch ID not found
      • 200001: Publication ID not found
      • 200077: ui language not supported
      • 200101: missing required query parameter
      • 200103: invalid/unsupported query parameter value
      • 300001: Initialize payment should not be used
      • 300005: Initialize payment should be used
      • 300009: Payment method not supported
      • 300013: Payment method does not support partial payment
      • 300301: Finalized payment can not de changed
      • 300311: FinalizePaymentRequest.fees contains fees with the same ID
      • 310001: Loan history ID not found
      • 310011: Loan history ID already exists
      • 330001: List ID not found
      • 330011: List ID already exists
      • 330101: List item ID not found
      • 330111: List item ID already exists

      One of: 500 · 600 · 10001 · 71001 · 100001 · 100011 · 100013 · 100023 · 100101 · 100211 · 100215 · 100221 · 100411 · 100611 · 101001 · 101047 · 101053 · 102001 · 102301 · 102311 · 110001 · 200001 · 200077 · 200101 · 200103 · 300001 · 300005 · 300009 · 300013 · 300301 · 300311 · 310001 · 310011 · 330001 · 330011 · 330101 · 330111

    • infostringrequired

      Starts with the text matching the error code field (defined above), and a describing text could be added.

401 Bearer token invalid, missing, or expired.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.

404 Resource not found.

Shared response, defined once for the whole API. See the shared contract on the version page.

No response body.