{ "openapi": "3.0.0", "info": { "title": "CaSS", "version": "1.7.1" }, "security": [ { "openId": [] } ], "components": { "securitySchemes": { "openId": { "type": "openIdConnect", "description": "OpenID Connect authentication (when connected to SSO, non-SSO is bespoke key based security).", "openIdConnectUrl": "https://example.com/.well-known/openid-configuration" } }, "parameters": { "frameworkId": { "in": "query", "schema": { "type": "string" }, "name": "frameworkId", "allowReserved": true, "description": "Identifier for the framework used in the profile calculation.", "example": "https://cass.asid.eduworks.com/api/data/schema.cassproject.org.0.4.Framework/0caa8f8c-139f-4a6f-95b2-e8327fa99f62" }, "subject": { "in": "query", "schema": { "type": "string" }, "name": "subject", "allowReserved": true, "description": "Identifier for the subject (person) whose profile is being calculated.", "example": "https://cass.asid.eduworks.com/api/data/schema.org.Person/146ea4b8eece12658c2d5c5255ca95fe" }, "flushCache": { "in": "query", "schema": { "type": "boolean" }, "name": "flushCache", "required": false, "description": "If true, forces recalculation of the profile rather than using a cached version.", "example": true }, "cache": { "in": "query", "schema": { "type": "boolean" }, "name": "cache", "required": false, "description": "If true, allows the use of cached profile data to speed up response time.", "example": true }, "targetDateTime": { "in": "query", "schema": { "type": "integer" }, "name": "targetDateTime", "required": false, "description": "A target time (in UTC milliseconds) to calculate the profile over by filtering assertions", "example": 1675901084853 }, "searchQuery": { "in": "query", "schema": { "type": "string" }, "name": "q", "allowReserved": true, "description": "Query portion of Elastic Simple Query String querying against JSON-LD object formats, Ensure you use @type: to search for objects of specific types, such as Person objects. See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#simple-query-string-syntax", "example": "name:* AND @type:Competency" }, "uid": { "in": "path", "schema": { "type": "string" }, "name": "uid", "required": true, "allowReserved": true, "description": "GUID, unique identifier, or MD5 of an object's @id.", "example": "ce-07c25f74-9119-11e8-b852-782bcb5df6ac" }, "type": { "in": "path", "schema": { "type": "string" }, "name": "type", "required": true, "allowReserved": true, "description": "Type of the object, with namespace, normalized", "example": "schema.cassproject.org.0.4.Framework" }, "history": { "in": "query", "schema": { "type": "string" }, "name": "history", "required": false, "description": "Fetches history of object. Will only return portions of the object's history that the user is allowed to see.", "example": false }, "version": { "in": "query", "schema": { "type": "integer" }, "name": "version", "required": false, "description": "Version of the object. For CaSS-created data, the timestamp of the modification. For otherwise-registered data, increments from 1", "example": 1675901084853 }, "q": { "in": "query", "schema": { "type": "string" }, "name": "q", "allowReserved": true, "description": "Query portion of Simple Query String per Elastic, see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#simple-query-string-syntax", "example": "name:* AND @type:Competency" }, "start": { "in": "query", "schema": { "type": "integer" }, "name": "start", "description": "If doing paging, the number of results to ignore. Note that CaSS will not return beyond 10,000 results no matter the start parameter.", "example": 0 }, "size": { "in": "query", "schema": { "type": "integer" }, "name": "size", "description": "The number of results to return. Max 10000 without changes to Elastic.", "example": 10000 }, "index_hint": { "in": "query", "schema": { "type": "string" }, "name": "index_hint", "allowReserved": true, "description": "Provides an index hinting string to accelerate typed search and avoid searching _all.", "example": "*competency,*encryptedvalue" } }, "schemas": { "SignatureSheet": { "type": "array", "description": "Array of Signatures.", "items": { "type": "object", "properties": { "type": { "type": "string", "description": "@type of the signature per JSON-LD Specification.", "example": "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodYG6jIBqwmshwMD9Ahy9c1on/m0/tVsSHpaefOlRScFV5LmOzisxv4dBHzM7cVElrYP148yIKmXJ/mRNE7tOv5RBoC+kPNoL+9hiw+UnlZEQgjWj7zib1jTVi5YeqHehHiY470YR1dL44QsTIg0hbynJeCq5dbkXK+TdEqL3m0EOjlAVGr8V7awWU29zb5UQuzV/bcSr4LddeJULQVmUxD8gRolR426CRvwuSmf2mS4UuGGSJQu5FmrDcIMmp3/DeEhzlrJLMi2PmjSJHsUJiQBs6eh6gmsFPGSOr8SUQM5pvuCgJMmurLb9mxIKIatbTUcm2JxIICPiRlNzXpMCwIDAQAB-----END PUBLIC KEY-----" }, "context": { "type": "string", "description": "@context of the signature per JSON-LD Specification.", "example": "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodYG6jIBqwmshwMD9Ahy9c1on/m0/tVsSHpaefOlRScFV5LmOzisxv4dBHzM7cVElrYP148yIKmXJ/mRNE7tOv5RBoC+kPNoL+9hiw+UnlZEQgjWj7zib1jTVi5YeqHehHiY470YR1dL44QsTIg0hbynJeCq5dbkXK+TdEqL3m0EOjlAVGr8V7awWU29zb5UQuzV/bcSr4LddeJULQVmUxD8gRolR426CRvwuSmf2mS4UuGGSJQu5FmrDcIMmp3/DeEhzlrJLMi2PmjSJHsUJiQBs6eh6gmsFPGSOr8SUQM5pvuCgJMmurLb9mxIKIatbTUcm2JxIICPiRlNzXpMCwIDAQAB-----END PUBLIC KEY-----" }, "expiry": { "type": "integer", "description": "Expiration date of this signature measured in milliseconds since the Unix Epoch.", "example": 1675901144907 }, "server": { "type": "string", "description": "PEM encoded public key of the entity who wants to perform this action. Used to validate @signature. Compared against the @owner or @reader field of objects that are having operations performed against them.", "example": "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodYG6jIBqwmshwMD9Ahy9c1on/m0/tVsSHpaefOlRScFV5LmOzisxv4dBHzM7cVElrYP148yIKmXJ/mRNE7tOv5RBoC+kPNoL+9hiw+UnlZEQgjWj7zib1jTVi5YeqHehHiY470YR1dL44QsTIg0hbynJeCq5dbkXK+TdEqL3m0EOjlAVGr8V7awWU29zb5UQuzV/bcSr4LddeJULQVmUxD8gRolR426CRvwuSmf2mS4UuGGSJQu5FmrDcIMmp3/DeEhzlrJLMi2PmjSJHsUJiQBs6eh6gmsFPGSOr8SUQM5pvuCgJMmurLb9mxIKIatbTUcm2JxIICPiRlNzXpMCwIDAQAB-----END PUBLIC KEY-----" }, "@owner": { "type": "string", "description": "PEM encoded public key of the entity who wants to perform this action. Used to validate @signature. Compared against the @owner or @reader field of objects that are having operations performed against them.", "example": "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodYG6jIBqwmshwMD9Ahy9c1on/m0/tVsSHpaefOlRScFV5LmOzisxv4dBHzM7cVElrYP148yIKmXJ/mRNE7tOv5RBoC+kPNoL+9hiw+UnlZEQgjWj7zib1jTVi5YeqHehHiY470YR1dL44QsTIg0hbynJeCq5dbkXK+TdEqL3m0EOjlAVGr8V7awWU29zb5UQuzV/bcSr4LddeJULQVmUxD8gRolR426CRvwuSmf2mS4UuGGSJQu5FmrDcIMmp3/DeEhzlrJLMi2PmjSJHsUJiQBs6eh6gmsFPGSOr8SUQM5pvuCgJMmurLb9mxIKIatbTUcm2JxIICPiRlNzXpMCwIDAQAB-----END PUBLIC KEY-----" }, "@signature": { "type": "string", "description": "Base64 encoded cryptographic signature of this object (minus @signature and @signatureSha256) by the private key holder identified by @owner.", "example": "JCZlDnSSRKII+bXChVzmCTLe7YPpw+6U+m/fEMR88flveU565QtwyVKY54HfbL5mDa3FtVuxHYTdExeNRj6Q16Tr9AYIAWVc3ckk4ROcWHDcgT73eOrxv238+oBMJAfUw6PvoC/fE68ToUCCcAXq6lhxx2yDzqRT4SZIeRcLQBFcEoHMLdP9lOepzJ5gqpaOkmwz2JKv1qjPbhf7tIA9w/AyW2Skx5Uoh4PoOqRH9YhZHcsKI5h5OKWX+X9y8tFVDm7TdV1ZBTS65Kk0uah91tHLQPuCJP8fWF4EP+7C/Cb7EifiGDSoZr3rG30dV1EQdyFdg9U+Pg0z+KMlAFAqDQ==" }, "@signatureSha256": { "type": "string", "description": "Base64 encoded cryptographic signature of this object (minus @signature and minus @signatureSha256) by the private key holder identified by @owner.", "example": "JCZlDnSSRKII+bXChVzmCTLe7YPpw+6U+m/fEMR88flveU565QtwyVKY54HfbL5mDa3FtVuxHYTdExeNRj6Q16Tr9AYIAWVc3ckk4ROcWHDcgT73eOrxv238+oBMJAfUw6PvoC/fE68ToUCCcAXq6lhxx2yDzqRT4SZIeRcLQBFcEoHMLdP9lOepzJ5gqpaOkmwz2JKv1qjPbhf7tIA9w/AyW2Skx5Uoh4PoOqRH9YhZHcsKI5h5OKWX+X9y8tFVDm7TdV1ZBTS65Kk0uah91tHLQPuCJP8fWF4EP+7C/Cb7EifiGDSoZr3rG30dV1EQdyFdg9U+Pg0z+KMlAFAqDQ==" } } }, "example": [ { "type": "TimeLimitedSignature", "context": "https://schema.cassproject.org/kbac/0.4", "expiry": 1675901144907, "server": "http://localhost/api/data/schema.org.Person/5d1433859a739684cc88338f92cf59ad", "@owner": "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodYG6jIBqwmshwMD9Ahy9c1on/m0/tVsSHpaefOlRScFV5LmOzisxv4dBHzM7cVElrYP148yIKmXJ/mRNE7tOv5RBoC+kPNoL+9hiw+UnlZEQgjWj7zib1jTVi5YeqHehHiY470YR1dL44QsTIg0hbynJeCq5dbkXK+TdEqL3m0EOjlAVGr8V7awWU29zb5UQuzV/bcSr4LddeJULQVmUxD8gRolR426CRvwuSmf2mS4UuGGSJQu5FmrDcIMmp3/DeEhzlrJLMi2PmjSJHsUJiQBs6eh6gmsFPGSOr8SUQM5pvuCgJMmurLb9mxIKIatbTUcm2JxIICPiRlNzXpMCwIDAQAB-----END PUBLIC KEY-----", "@signature": "JCZlDnSSRKII+bXChVzmCTLe7YPpw+6U+m/fEMR88flveU565QtwyVKY54HfbL5mDa3FtVuxHYTdExeNRj6Q16Tr9AYIAWVc3ckk4ROcWHDcgT73eOrxv238+oBMJAfUw6PvoC/fE68ToUCCcAXq6lhxx2yDzqRT4SZIeRcLQBFcEoHMLdP9lOepzJ5gqpaOkmwz2JKv1qjPbhf7tIA9w/AyW2Skx5Uoh4PoOqRH9YhZHcsKI5h5OKWX+X9y8tFVDm7TdV1ZBTS65Kk0uah91tHLQPuCJP8fWF4EP+7C/Cb7EifiGDSoZr3rG30dV1EQdyFdg9U+Pg0z+KMlAFAqDQ==" } ] }, "JsonLd": { "type": "object", "description": "Result", "example": { "@context": "", "@id": "", "@type": "" } }, "JsonLdHistory": { "type": "array", "description": "Array of historical results", "items": { "type": "object", "description": "Result", "example": { "@context": "", "@id": "", "@type": "" } } }, "JsonLdArray": { "type": "array", "description": "Array of results", "items": { "type": "object", "description": "Result", "example": { "@context": "", "@id": "", "@type": "" } } }, "SearchParams": { "type": "object", "properties": { "searchParams": { "type": "object", "properties": { "q": { "type": "string", "description": "Query portion of Simple Query String per Elastic, see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#simple-query-string-syntax", "example": "name:* AND @type:Competency" }, "start": { "type": "integer", "description": "If doing paging, the number of results to ignore. Note that CaSS will not return beyond 10,000 results no matter the start parameter.", "example": 0 }, "size": { "type": "integer", "description": "The number of results to return. Max 10000 without changes to Elastic.", "example": 10000 }, "sort": { "type": "string", "description": "Elastic sort JSON object. See https://www.elastic.co/guide/en/elasticsearch/reference/8.6/sort-search-results.html", "example": "[ { \"name.keyword\": {\"order\" : \"asc\" , \"unmapped_type\" : \"text\", \"missing\" : \"_last\"}} ]" }, "index_hint": { "type": "string", "description": "Provides an index hinting string to accelerate typed search and avoid searching _all.", "example": "*competency,*encryptedvalue" } }, "required": [ "q" ] } } }, "MultiGetParams": { "type": "array", "description": "Array of partial identifiers", "items": { "type": "string", "description": "uid-like identifier prefixed with data/", "example": "data/0a8372fb9b073e5ebb7dc07e20fdfbea" } } } }, "tags": [] }