Inventory Storage Holdings Batch Synchronous API (v1.1)

http://localhost

Table of contents

Inventory Storage Holdings Batch Sync API

Batch API for synchronously uploading holdings records into the inventory

Holdings Batch Upload Sync API

POST /holdings-storage/batch/synchronous

Create or update a collection of holdings in a single synchronous request; if any holding fails the complete batch will be rejected (all or nothing)

POST /holdings-storage/batch/synchronous
Query Parameters
  • upsert: (boolean - default: false)

    When a record with the same id already exists upsert=true will update it, upsert=false will fail the complete batch. The _version property of each holding to be updated must match the stored _version property (optimistic locking).

Body

Media type: application/json

Type: json

Content:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "description": "A collection of holdings records",
  "type": "object",
  "properties": {
    "holdingsRecords": {
      "description": "List of holdings records",
      "id": "holdingsRecord",
      "type": "array",
      "items": {
        "type": "object",
        "$schema": "http://json-schema.org/draft-04/schema#",
        "description": "A holdings record",
        "javaType": "org.folio.rest.jaxrs.model.HoldingsRecord",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "the unique ID of the holdings record; UUID",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "_version": {
            "type": "integer",
            "description": "Record version for optimistic locking"
          },
          "sourceId": {
            "description": "(A reference to) the source of a holdings record",
            "type": "string",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "hrid": {
            "type": "string",
            "description": "the human readable ID, also called eye readable ID. A system-assigned sequential ID which maps to the Instance ID"
          },
          "holdingsTypeId": {
            "type": "string",
            "description": "unique ID for the type of this holdings record, a UUID",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "formerIds": {
            "type": "array",
            "description": "Previous ID(s) assigned to the holdings record",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "instanceId": {
            "description": "Inventory instances identifier",
            "type": "string",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "permanentLocationId": {
            "type": "string",
            "description": "The permanent shelving location in which an item resides.",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "temporaryLocationId": {
            "type": "string",
            "description": "Temporary location is the temporary location, shelving location, or holding which is a physical place where items are stored, or an Online location.",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "effectiveLocationId": {
            "type": "string",
            "description": "Effective location is calculated by the system based on the values in the permanent and temporary locationId fields.",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "electronicAccess": {
            "description": "List of electronic access items",
            "type": "array",
            "items": {
              "type": "object",
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "Electronic access item",
              "javaType": "org.folio.rest.jaxrs.model.ElectronicAccessItem",
              "additionalProperties": false,
              "properties": {
                "uri": {
                  "type": "string",
                  "description": "uniform resource identifier (URI) is a string of characters designed for unambiguous identification of resources"
                },
                "linkText": {
                  "type": "string",
                  "description": "the value of the MARC tag field 856 2nd indicator, where the values are: no information provided, resource, version of resource, related resource, no display constant generated"
                },
                "materialsSpecification": {
                  "type": "string",
                  "description": "materials specified is used to specify to what portion or aspect of the resource the electronic location and access information applies (e.g. a portion or subset of the item is electronic, or a related electronic resource is being linked to the record)"
                },
                "publicNote": {
                  "type": "string",
                  "description": "URL public note to be displayed in the discovery"
                },
                "relationshipId": {
                  "type": "string",
                  "description": "relationship between the electronic resource at the location identified and the item described in the record as a whole"
                }
              },
              "required": [
                "uri"
              ]
            }
          },
          "additionalCallNumbers": {
            "description": "Additional Call Numbers to track the history of identifiers assigned to an item.",
            "type": "array",
            "items": {
              "type": "object",
              "uniqueItems": true,
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "A call number",
              "properties": {
                "typeId": {
                  "type": "string",
                  "description": "unique ID for the type of call number on a holdings record, a UUID",
                  "$schema": "http://json-schema.org/draft-04/schema#",
                  "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}$"
                },
                "prefix": {
                  "type": "string",
                  "description": "Prefix of the call number on the holding level."
                },
                "callNumber": {
                  "type": "string",
                  "description": "Call Number is an identifier assigned to an item, usually printed on a label attached to the item."
                },
                "suffix": {
                  "type": "string",
                  "description": "Suffix of the call number on the holding level."
                }
              },
              "additionalProperties": false,
              "required": [
                "callNumber"
              ]
            }
          },
          "callNumberTypeId": {
            "type": "string",
            "description": "unique ID for the type of call number on a holdings record, a UUID",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "callNumberPrefix": {
            "type": "string",
            "description": "Prefix of the call number on the holding level."
          },
          "callNumber": {
            "type": "string",
            "description": "Call Number is an identifier assigned to an item, usually printed on a label attached to the item."
          },
          "callNumberSuffix": {
            "type": "string",
            "description": "Suffix of the call number on the holding level."
          },
          "shelvingTitle": {
            "type": "string",
            "description": "Indicates the shelving form of title."
          },
          "acquisitionFormat": {
            "type": "string",
            "description": "Format of holdings record acquisition"
          },
          "acquisitionMethod": {
            "type": "string",
            "description": "Method of holdings record acquisition"
          },
          "receiptStatus": {
            "type": "string",
            "description": "Receipt status (e.g. pending, awaiting receipt, partially received, fully received, receipt not required, and cancelled)"
          },
          "administrativeNotes": {
            "type": "array",
            "description": "Administrative notes",
            "minItems": 0,
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "type": "array",
            "description": "Notes about action, copy, binding etc.",
            "items": {
              "type": "object",
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "A holdings record note",
              "javaType": "org.folio.rest.jaxrs.model.HoldingsNote",
              "additionalProperties": false,
              "properties": {
                "holdingsNoteTypeId": {
                  "type": "string",
                  "description": "ID of the type of note",
                  "$schema": "http://json-schema.org/draft-04/schema#",
                  "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}$"
                },
                "note": {
                  "type": "string",
                  "description": "Text content of the note"
                },
                "staffOnly": {
                  "type": "boolean",
                  "description": "If true, determines that the note should not be visible for others than staff",
                  "default": false
                }
              }
            }
          },
          "illPolicyId": {
            "type": "string",
            "description": "unique ID for an ILL policy, a UUID",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "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}$"
          },
          "retentionPolicy": {
            "type": "string",
            "description": "Records information regarding how long we have agreed to keep something."
          },
          "digitizationPolicy": {
            "description": "Records information regarding digitization aspects.",
            "type": "string"
          },
          "holdingsStatements": {
            "description": "Holdings record statements",
            "type": "array",
            "items": {
              "type": "object",
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "Holdings record statement",
              "javaType": "org.folio.rest.jaxrs.model.HoldingsStatement",
              "additionalProperties": false,
              "properties": {
                "statement": {
                  "type": "string",
                  "description": "Specifies the exact content to which the library has access, typically for continuing publications."
                },
                "note": {
                  "type": "string",
                  "description": "Note attached to a holdings statement"
                },
                "staffNote": {
                  "type": "string",
                  "description": "Private note attached to a holdings statement"
                }
              }
            }
          },
          "holdingsStatementsForIndexes": {
            "description": "Holdings record indexes statements",
            "type": "array",
            "items": {
              "type": "object",
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "Holdings record statement",
              "javaType": "org.folio.rest.jaxrs.model.HoldingsStatement",
              "additionalProperties": false,
              "properties": {
                "statement": {
                  "type": "string",
                  "description": "Specifies the exact content to which the library has access, typically for continuing publications."
                },
                "note": {
                  "type": "string",
                  "description": "Note attached to a holdings statement"
                },
                "staffNote": {
                  "type": "string",
                  "description": "Private note attached to a holdings statement"
                }
              }
            }
          },
          "holdingsStatementsForSupplements": {
            "description": "Holdings record supplements statements",
            "type": "array",
            "items": {
              "type": "object",
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "Holdings record statement",
              "javaType": "org.folio.rest.jaxrs.model.HoldingsStatement",
              "additionalProperties": false,
              "properties": {
                "statement": {
                  "type": "string",
                  "description": "Specifies the exact content to which the library has access, typically for continuing publications."
                },
                "note": {
                  "type": "string",
                  "description": "Note attached to a holdings statement"
                },
                "staffNote": {
                  "type": "string",
                  "description": "Private note attached to a holdings statement"
                }
              }
            }
          },
          "copyNumber": {
            "type": "string",
            "description": "Item/Piece ID (usually barcode) for systems that do not use item records. Ability to designate the copy number if institution chooses to use copy numbers."
          },
          "numberOfItems": {
            "type": "string",
            "description": "Text (Number)"
          },
          "receivingHistory": {
            "description": "Receiving history of holdings record",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "javaType": "org.folio.rest.jaxrs.model.HoldingsReceivingHistory",
            "additionalProperties": false,
            "type": "object",
            "properties": {
              "displayType": {
                "type": "string",
                "description": "Display hint. 1: Display fields separately. 2: Display fields concatenated"
              },
              "entries": {
                "type": "array",
                "description": "Entries of receiving history",
                "items": {
                  "$schema": "http://json-schema.org/draft-04/schema#",
                  "description": "Receiving history entry of holdings record",
                  "javaType": "org.folio.rest.jaxrs.model.HoldingsReceivingHistoryEntry",
                  "additionalProperties": false,
                  "type": "object",
                  "properties": {
                    "publicDisplay": {
                      "type": "boolean",
                      "description": "Defines if the receivingHistory should be visible to the public."
                    },
                    "enumeration": {
                      "type": "string",
                      "description": "This is the volume/issue number (e.g. v.71:no.6-2)"
                    },
                    "chronology": {
                      "type": "string",
                      "description": "Repeated element from Receiving history - Enumeration AND Receiving history - Chronology"
                    }
                  }
                }
              }
            }
          },
          "discoverySuppress": {
            "type": "boolean",
            "description": "records the fact that the record should not be displayed in a discovery system"
          },
          "statisticalCodeIds": {
            "type": "array",
            "description": "List of statistical code IDs",
            "items": {
              "type": "string",
              "$schema": "http://json-schema.org/draft-04/schema#",
              "description": "A universally unique identifier (UUID), this is a 128-bit number used to identify a record and is shown in hex with dashes, for example 6312d172-f0cf-40f6-b27d-9fa8feaf332f; the UUID version must be from 1-5; see https://dev.folio.org/guides/uuids/",
              "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}$"
            },
            "uniqueItems": true
          },
          "tags": {
            "description": "arbitrary tags associated with this holding",
            "id": "tags",
            "type": "object",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "title": "tags",
            "properties": {
              "tagList": {
                "description": "List of tags",
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "metadata": {
            "type": "object",
            "readonly": true,
            "$schema": "http://json-schema.org/draft-04/schema#",
            "id": "metadata.schema",
            "title": "Metadata Schema",
            "description": "Metadata about creation and changes to records, provided by the server (client should not provide)",
            "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-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{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-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
              },
              "updatedByUsername": {
                "description": "Username of the user who last updated the record (when available)",
                "type": "string"
              }
            },
            "additionalProperties": false,
            "required": [
              "createdDate"
            ]
          }
        },
        "required": [
          "sourceId",
          "instanceId",
          "permanentLocationId"
        ]
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "holdingsRecords"
  ]
}

Example:

{
  "holdingsRecords": [
    {
      "id": "65cb2bf0-d4c2-4886-8ad0-b76f1ba75d61",
      "instanceId": "cd28da0f-a3e4-465c-82f1-acade4e8e170",
      "sourceId": "8081d707-610f-4b50-a28b-c36a6d25191b",
      "permanentLocationId": "d9cd0bed-1b49-4b5e-a7bd-064b8d177231",
      "holdingsStatements": [
        {
          "statement": "Line 1",
          "note": "Note to line 1"
        },
        {
          "statement": "Line 2",
          "note": "Note to line2"
        }
      ],
      "tags" : {
        "tagList" : [
          "important"
        ]
      }
    },
    {
      "id": "807084d2-1b6c-4448-a566-d3d9ebfd1c08",
      "instanceId": "601a8dc4-dee7-48eb-b03f-d02fdf0debd0",
      "sourceId": "65cb2bf0-3333-4886-8ad0-b76f1ba75d23",
      "permanentLocationId": "d9cd0bed-1b49-4b5e-a7bd-064b8d177231",
      "holdingsStatements": [
        {
          "statement": "Line 1",
          "note": "Note to line 1"
        },
        {
          "statement": "Line 2",
          "note": "Note to line2"
        }
      ],"tags" : {
      "tagList" : [
        "important"
        ]
      }
    }
  ]
}

Response 201

All holdings have been successfully created or updated

Response 409

Optimistic locking version conflict

Body

Media type: text/plain

Type: any

Example:

version conflict

Response 413

Payload Too Large

Body

Media type: text/plain

Type: any

Example:

Payload Too Large

Response 422

Unprocessable Entity

Body

Media type: application/json

Type: json

Content:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "errors.schema",
  "description": "A set of errors",
  "type": "object",
  "properties": {
    "errors": {
      "description": "List of errors",
      "id": "errors",
      "type": "array",
      "items": {
        "type": "object",
        "$schema": "http://json-schema.org/draft-04/schema#",
        "id": "error.schema",
        "description": "An error",
        "properties": {
          "message": {
            "type": "string",
            "description": "Error message text"
          },
          "type": {
            "type": "string",
            "description": "Error message type"
          },
          "code": {
            "type": "string",
            "description": "Error message code"
          },
          "parameters": {
            "description": "Error message parameters",
            "$schema": "http://json-schema.org/draft-04/schema#",
            "id": "parameters.schema",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              }
            }
          }
        },
        "required": [
          "message"
        ]
      }
    },
    "total_records": {
      "description": "Total number of errors",
      "type": "integer"
    }
  }
}

Response 500

Internal server error

Body

Media type: text/plain

Type: any

Example:

Internal server error