Factern API v3.0.210

RPC based API for accessing and manipulating facts in Factern.

What is a Fact?

Everything in Factern is a fact. And every fact is stored by appending it as a row in the persistent Fact Table.

Types of Facts:

  1. Nodes. These facts are the fundamental building blocks of Factern. One can think of an node as a representation of a real-world thing. Examples of nodes include an entity node that represents a person, or an information node that represents a person's current address.
  2. Statements. These facts are generally applied to nodes to give additional information about a node. For example, a statement might be used to label a node with a status.

Types of Nodes:

  • Login. All API operations must be associated with some authorized login.
  • Application. All API operations must be done from an authorized application.
  • Entity. The fundamental element, typically associated with real-world entities, like people, companies, property etc.
  • Information. Information nodes are used to associate data with an entity. Information nodes are either one-to-one with data, or collections of other information nodes.
  • Field. Every information node must have an associated field type that further describes the representation of the information. For example, it may describe whether the information is searchable.
  • Group. Groups are collections of nodes. Groups of logins, for example, can be used in permissions for specifying grantees.
  • Interface. Interfaces represent HTTP callable APIs, typically provided by a 3rd party. Factern can use them for many purposes, including as value stores and receivers of watch events.
  • Scope. A named set of templates together with a starting point. It can be used in permissioning to represent the accessibility of the data from a starting point.
  • Label List. A named list of labels that can used in statements about a node.
  • Template. A named list of field types. Typically used for reading/writing a set of information nodes.
  • Predicate. Predicates describe actions within Factern. Typically, a statement has an associated node and predicate which describes how the statement effects the node.

Types of Statements:

  • Permission. Permissions can used in statements about any fact to represent the accessibility of a particular fact or set of facts from other logins and applications.
  • Label. A label is used to indicate additional information about a node. A label may be used to represent a granular facet of a node, for example its country of origin.
  • Watch. Watches can used in statements about any node such that each modification to the node generates a watch event. For example, if an entity is watched, then anytime a new information node is added to the entity, a watch event is generated.
  • Watch Event. A statement on a Watch indicating the time and source of a modification to the watched node.

Factern Ids

Every fact, whether node or statement, has a globally unique 192 bit identifier, or UUID, typically represented using hexadecimal format, as in 00000000AEB098E27A6CD3959801C7AD9D55E9C9AFBF4E03. The case of the hex digits is not significant.

Immutability of Facts

Once a fact is created it cannot be modified. If you add the fact that Bob's shoe size is 12, that fact cannot be later changed to 10. That being said, a fact can be replaced with a newer version of that fact. The old fact, that Bob's shoe size is 12, remains, but only as a version of Bob's shoe size. The newest version of Bob's shoe size will be 10. This allows not only a listing of all versions of a fact, but also allows you to continue to refer to an old fact, since each version of the fact has its own unique Factern Id.

Externalization of Data

Facts are stored in the Fact Table, but the Fact Table does not store any values associated with facts. For example, the fact that Bob has a shoe size is stored in Factern (as an information node of entity "Bob", having field type "shoe size"), but the actual value of Bob's shoe size (10) is stored elsewhere. But where? Every Factern node with an associated value includes a special statement that indicates where the value is stored. The default storage is provided and managed by Factern, and is known as the default storage, having unique identifier 0000000000000000bfb55220179d405988248df31a18f793. Additional storages can be specified via the /createinterface endpoint. An interface creation specifies HTTPS endpoints for setting and getting values. As such an interface acts as a natural value store. The Factern Id of an interface can be used in any API call that allows the creation or fetch of an information node. You can use either builtin interfaces, or create one yourself. At Factern we understand that the location, encryption, and accessibility of data is key. An enterprise can use Factern for storing facts, but retain total control of the fact values by providing their own storage interfaces, or using any number of off-the-shelf storages provided by trusted third parties.

Logins and Applications

Logins, Application and Representing

Every API request must be made in the context of a login and an application. Additionally, each request can be made "representing" an entity. For example, you may be making requests using the Bob login and the Payroll application, but for any request, you are making the request while representing the your company entity, for example the Acme entity. Note that for the Bob login to use the Payroll application, the Payroll application would have had to be permissioned with respect to Bob. And for the Bob login to represent the Acme entity, again a permission to that effect needs to exist.

Login and Application setup

To begin using Factern, you must have a Login and an Application. You can start this process using the Factern Dev Portal, https://portal.factern.com/#/login. From the Dev Portal you can acquire a login Factern Id, application Factern Id and application secret.

Application Balances and TokenPayment

Each account will accumulate a balance for each API request. To continue to use the service the account balance will need to be occasionally settled by using the /settleaccount endpoint which initiates a token transfer on the blockchain. Finding the costs of API requests are made with the includeSummary property and will include the account balance. Ex. In order to find the balance of your account, use the includeSummary property set to true in the request.

POST /describe {
    ...
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "includeSummary": true
}

The response includes a summary of the request including the account balance.

{
    ...
    "summary": {
        "facts": {
            "read": 1,
            "written": 0
        },
        "cost": {
            "gas": {
                "consumed": 1,
                "price": 1
            },
            "total": 1
        },
        "account": {
            "balance": 4095
        }
    }
    ...
}

To settle an account, a wallet will need to be set up on the Rinkeby Ethereum Testnet, have a balance of Factern tokens and approve an amount to be allocated in the payment channel. For details on how to create and work with a wallet a good source of information is MyEtherWallet Getting Started

Signing

Signing a settlement agreement involves interacting with the Ethereum blockchain. To avoid needing to maintain a copy of the blockchain an Infura account can be used Get Started With Infura Here. It is assumed that an Infura API key has been created for any examples below. The web3 javascript library can be used to interact with the blockchain using Infura as the provider. The web3 dependency can be installed using npm.

npm install web3

Ex. To settle an account, a signed hash is required to validate the agreement on the blockchain. The following javascript shows how to generate a signature with some example values, the infura API key and private key will need to change along with a desired value.

const Web3 = require('web3'); const Account = require("eth-lib/lib/account");
const web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/nhoaoqqYadHfffA00A29"));
var paymentChannelAbi = [{"constant":true,"inputs":[{"name":"accountAddress","type":"address"}],"name":"nonceOf","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"}];
var value = 123; var contractAddress = '0x316700dea08eae492ea64b21d3654b338c679d21'; var publickey = '0x16e9718e7a55b523df5e30d9fce568b92586ef89'; var paddedValue = web3.utils.leftPad((value).toString(16), 64, 0); var privatekey = '0xB529Fe018fa028fe1fae8ba890987398afa9274fdd159b4b4a30f476677ac147';
var paymentChannelContract = new web3.eth.Contract(paymentChannelAbi, contractAddress);
paymentChannelContract.methods.nonceOf(publickey).call().then(function(nonce) {
  var signature = Account.sign(web3.utils.keccak256(contractAddress + publickey.slice(2) + nonce.slice(2) + paddedValue), privatekey);
  console.log(signature);
});

API Conventions

Invoking APIs

The Factern APIs are exposed using JSON over HTTP, using the POST method. Ex.

POST https://api.factern.com/v2/createentity {
    "parentId": "00000000156F212E6B4BB8E079D483CA073254692F7725B2"
}

One can use a tool like curl for invoking the Factern API. Ex.

curl -XPOST 'https://api.factern.com/v2/createentity' -H 'Content-Type: application/json' -d' {
    "parentId": "00000000156F212E6B4BB8E079D483CA073254692F7725B2"
} '

Throughout this document, in the interests of brevity, we often use a short-hand that omits the domain, version and parameters. Ex.

POST /createentity {
    "parentId": "00000000156F212E6B4BB8E079D483CA073254692F7725B2"
}

API Authentication

Factern is compatible with a number of authentication schemes, including shared secret, PKI and OAuth 2.0. Out-of-the-box, Factern uses Auth0, which implements the OAuth 2.0 specification. The Factern Auth0 endpoint is:

https://factern-test.eu.auth0.com

You should use Auth0 to acquire an access token (which is a JSON Web Token), that you must supply on every Factern API call. There are several means of retrieving an access token. #### Client Credentials Grant This method of retrieving an access token is typically used by an automated client (a CLI, daemon or a backend service).

curl -XPOST 'https://factern-test.eu.auth0.com/oauth/token' \
    -H 'Content-Type: application/json' \
    -d '{
        "client_id": "gIvTWlFmNNgz5xvhr2IR6o2Y1MzMwYe9",
        "client_secret": "FS_rNLrNiopDvAJpHl_z3YymceSMw56DyMlDIhSryTJ1Gqg3cPr5O7_Bksv7I64q",
        "audience": "https://api.factern.com",
        "grant_type": "client_credentials"
    }'

The client_id and client_secret values are those you received in response when you created the application. The response from the POST to factern-test.eu.auth0.com will be of form:

{
    'access_token': 'eyJraWQiOiJyc2ExIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOiI4ZmY2ZjMxZi1hNjZiLTRlMGMtOGYyZC04N2MwMzc2ZTE1Y2IiLCJpc3MiOiJodHRwczpcL1wvc3NvLmZhY3Rlcm4uY29tXC9hdXRoXC8iLCJleHAiOjE0OTU1NDk5MDEsImlhdCI6MTQ5NTU0NjMwMSwianRpIjoiNDZjNGZkNDAtNjJlOS00M2NiLTlmZTgtYTI2ZTViN2RkYTNhIn0.F402AMctzVq7Kui2vthfDTCLfS4ImBqhbe8iRk7AJtLNkkj-52pwq2ySBSM3_QqizU-rz6UnJFat7qGXRro0eiYxk98ljcIEQ8iHFvgrosXpGJTrxG-OBLzYIissbEQjpysKQ7P_5UD7Cq-ZW5p8v29Ezs2kmZYV1sauSYZIAxN8cdphsIF2km6mjPm2MRVcvWbx49NGvkJ-HkAz_Bxc172cAzsLnD0gRZwVZgttzhZrTgEf21Nzho_EDuFUicpS02fTQvO53Hf9XPRnZtYHg4Q7k9XM8SIvj76x2FclxWhQZ-VyqXHIstMe2S6g-KugTDVTDGSuhALKBxwjaXY-Rw',
    'token_type': 'Bearer',
    'expires_in': 86400,
}

Implicit Grant

This method of retrieving an access token is used by client apps (like a single page application) to access an API. To initialize this flow, the user has to directed to the Auth0 authorization URL, which looks like:

https://factern-test.eu.auth0.com/authorize?
    audience=https://api.factern.com&
    scope=profile&
    response_type=token&
    client_id=tZ05iSvx9pdg4OyyQD6KbouSK89z44GP&
    redirect_uri=http://localhost:3000/callback&
    state=aGFoYWhh

The client_id is returned when a new Application is created, and the redirect_uri should be one of the specified redirect URIs in the application create request. The user will be prompted to login (or sign up) using a username-password or social login. After completing this step, the user will be redirected back to the client web application along with the access_token as a part of the hash string

http://localhost:3000/callback#
  access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlJqUXpORE01TWtRNFJqWkZNVEEwTnpFd01FVkRSREpHTVRSRk9UaEVPVU0xTURVeVJEZ3pPQSJ9.eyJodHRwczovL2FwaS5mYWN0ZXJuLmNvbS9sb2dpbl9mYWN0ZXJuX2lkIjoiMDAwMDAwMDBBQThFNTFDNzA2MzZDMjFEM0E2MEMwRDkzRDIzOUJGQkFDNEQyQzA4IiwiaHR0cHM6Ly9hcGkuZmFjdGVybi5jb20vYXBwX2lkIjoiMDAwMDAwMDA0QzQ4RDU3NUQ1QjM5OTUyMDk3MUZFMUZGRTgxQTg1ODA0QURFMzk1IiwiaXNzIjoiaHR0cHM6Ly9mYWN0ZXJuLXRlc3QuZXUuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDViMjk1M2I3ZDE2YzcwMjdlZTA4NWNiZiIsImF1ZCI6Imh0dHBzOi8vYXBpLmZhY3Rlcm4uY29tIiwiaWF0IjoxNTI5NjgzMjM0LCJleHAiOjE1Mjk2OTA0MzQsImF6cCI6InRaMDVpU3Z4OXBkZzRPeXlRRDZLYm91U0s4OXo0NEdQIiwic2NvcGUiOiIifQ.zMJhwIqIcAHOL9MBpw5_gdixd0NFOKEX_SE4ms78WPo9q88nGhQLGFzGa7WeoaY7ytcp5DwRWAPB1xBd92bDo_TdvqSeVygiEFc3dgY2x3u6uexF9v9_rRLz6bL7XEiz62ftSqRLRqaAaUssc9pwdCJKz-Gv7PIXISvxz4D6SCcDlE0Ct7o109zoW3idBmkUqh7PuvaPT2nQAVohwlmEA5YJ2k1Y0RjILtLay7-f3xAXC0sYd8lJMB4t1rpnkgaQlX6FywtnGazpYqZ7_3w5T51oCqYKr51q3SgtlHsdRI1CMO0XaogCns5RCO_sqe905j-nKqCYdZebnyVjGF8OuQ&
  expires_in=7200&
  token_type=Bearer&
  state=aGFoYWhh

It is the access_token value you will need to supply on each call to api.factern.com. An example use of this then (to create an entity):

curl -XPOST 'https://api.factern.com/v2/createentity?user=000000002763084B71BF685830B74B23C8316EBCA1B55785&operatingAs=000000002763084B71BF685830B74B23C8316EBCA1B55785' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer eyJraWQiOiJyc2ExIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOiI4ZmY2ZjMxZi1hNjZiLTRlMGMtOGYyZC04N2MwMzc2ZTE1Y2IiLCJpc3MiOiJodHRwczpcL1wvc3NvLmZhY3Rlcm4uY29tXC9hdXRoXC8iLCJleHAiOjE0OTU1NDk5MDEsImlhdCI6MTQ5NTU0NjMwMSwianRpIjoiNDZjNGZkNDAtNjJlOS00M2NiLTlmZTgtYTI2ZTViN2RkYTNhIn0.F402AMctzVq7Kui2vthfDTCLfS4ImBqhbe8iRk7AJtLNkkj-52pwq2ySBSM3_QqizU-rz6UnJFat7qGXRro0eiYxk98ljcIEQ8iHFvgrosXpGJTrxG-OBLzYIissbEQjpysKQ7P_5UD7Cq-ZW5p8v29Ezs2kmZYV1sauSYZIAxN8cdphsIF2km6mjPm2MRVcvWbx49NGvkJ-HkAz_Bxc172cAzsLnD0gRZwVZgttzhZrTgEf21Nzho_EDuFUicpS02fTQvO53Hf9XPRnZtYHg4Q7k9XM8SIvj76x2FclxWhQZ-VyqXHIstMe2S6g-KugTDVTDGSuhALKBxwjaXY-Rw \
    -d '
{
    "parentId": "00000000156F212E6B4BB8E079D483CA073254692F7725B2"
}'

The user and operatingAs parameters are the login and representing login Factern Ids, with just example values here. The JSON payload is also just an example. The Authorization: Bearer AUTH_TOKEN token is the value of the previously returned access_token. Note that when using an access token that was obtained using the Implicit Grant flow, the user and operatingAs URL parameters can be omitted. They are inferred from the decoded access token. ## API Clients Factern has a number of language native clients. If there are additional clients you would like to see or contribute, please let us know. * Java Client * JavaScript Client * Python Client

Factern Resource Identifiers

Factern Resource Identifiers, or FRIs, are unique identifiers that can be used to reference a Factern resource.

FRN

Some node types are named and can be referenced by a Factern Resource Name identifier (FRN) of the form frn:factType:ownerLoginId:name. FRN identifiers are currently supported for Fields, Groups, Templates, Scopes, LabelLists, LabelListMembers, Interfaces, Applications and Entities. Note that LabelListMembers are namespaced within LabelList names by using a forward slash (/) It is also possible to omit the ownerLoginId if the requestor is also the node owner. In order to access facts which are associated with the public factern agent, specify factern as the ownerLoginId.

Fact Type FRI Name Example
Field field frn:field::FullName
Group group frn:group::AdminLogins
Template template frn:template::ProfileData
Scope scope frn:scope::AccessibleData
LabelList labellist frn:labellist::ConfirmationStatus
LabelListMember labellistmember frn:labellistmember::ConfirmationStatus/Confirmed
Application application frn:application::PayrollApplication
Interface interface frn:interface::BulkStorageInterface
Entity entity frn:entity::JohnWatsonNode
Predicate predicate frn:predicate::creates

Example

In this example, we create a field and then describe it using its FRI. Our loginId is 00000000F5CB5E7245AAB0860E7C08F6F0EA8DD80FF7F649.

POST /createfield {
    "name": "SalesLeads",
    ...
}

Response

{
    ...
    "nodeId": "000000008029289F643854A1FE32F2EB69DEDFDD54B40EA9",
    ...
}
POST /describe {
    ...
    "nodeId": "frn:field:00000000F5CB5E7245AAB0860E7C08F6F0EA8DD80FF7F649:SalesLeads",
    ...
}

Response

{
    ...
    "nodeId": "00000000CE5945571ED67F0A34D25FEFC54F0E66416A2DF7",
    ...
}

Example

The loginId can be omitted if the requestor is also the node owner.

POST /describe {
    ...
    "nodeId": "frn:field::SalesLeads",
    ...
}

Response

{
    ...
    "nodeId": "00000000CE5945571ED67F0A34D25FEFC54F0E66416A2DF7",
    ...
}

Short FRN

It is also possible to omit the node type and loginId if they can be inferred from the context of the request. Then the FRI can be specified in the form :name.

Example

In this example, we create a template and a scope. The short FRI is used to reference the template when creating the scope.

POST /createtemplate {
    ...
    "name": "PersonProfile",
    ...
}

Now we create the scope using the template's short FRI.

POST /createscope {
    "name": "ProfileAndLoginScope",
    "templateIds": [
        ":PersonProfile",
        ...
    ]
}

Nested FRN

When using inline templates and documents, nested keys in JSONs can be referenced using the shorter forward slash (/) syntax.

Example

For example, this is the inline template to update the property :City that is nested under :Contact and :BasicAddress.

{
    ...
    "template": [
        {
            ":Contact": [
                {
                    ":BasicAddress" : [
                        ":City"
                    ]
                }
            ]
        }
    ],
    "values": [ "London" ]
}

This is the same as using this template with the forward slash syntax.

{
    ...
    "template": [
        ":Contact/:BasicAddress/:City"
    ],
    "values": [ "London" ]
}

Example

The inline template to update multiple properties :Street and :City that are nested under :Contact and :BasicAddress is:

{
    ...
    "template": [
        {
            ":Contact": [
                {
                    ":BasicAddress" : [
                        ":Street",
                         ":City"
                    ]
                }
            ]
        }
    ],
    "values": [ "Inverness Terrace", "London" ]
}

The branch property ":BasicAddress" can be referenced using the slash syntax.

{
    ...
    "template": [
        {
            ":Contact/:BasicAddress": [
                ":Street",
                 ":City"
            ]
        }
    ],
    "values": [ "Inverness Terrace", "London" ]
}

Example

Inline documents can also use the same syntax. This is the inline document to update ":City" that is nested under ":Contact" and ":BasicAddress".

{
    ...
    "document": [
        {
            ":Contact": [
                {
                    ":BasicAddress": [
                        {
                            ":City": "Manchester"
                        }
                    ]
                }
            ]
        }
    ]
}

This is equivalent to:

{
    ...
    "document": [
        {
            ":Contact/:BasicAddress/:City": "Manchester"
        }
    ]
}

Preread Hook

A statement can be made against an entity to associate a preread interface. Whenever a template is applied to an entity to read the entity's fields, the interface will be called synchronously before the fields are read. One possible utilization of this preread hook is to lazily create initial values or updated values under the entity.

Example

We create an entity associated with the person "Irene Adler". Other than that, we have no other data associated with the entity.

POST /createentity {
    "name": "IreneAdler"
}
Response {
    ...
    "nodeId": "000000000FA91BF1B1084BC5697DB361B5B72B007F4DA1FC",
    ...
}

We create an interface LazyLoadProfileData that will be called whenever the "Irene Adler" entity is read.

POST /createinterface {
    ...
    "addData": {"url": "https://acme.com/loadprofiledata"},
    "name": "LazyLoadProfileData"
    ...
}

We associate the "Irene Adler" entity with the preread interface. Note that the special action id 000000000000000034375CE3851C457F96D7D4C6115EB91E is used to indicate a preread interface hook.

POST /createstatement {
    "targetNodeId": "frn:entity::IreneAdler",
    "actionId": "000000000000000034375CE3851C457F96D7D4C6115EB91E",
    "actionQualifierId": "frn:interface::LazyLoadProfileData"
}

Later, some application reads the "Irene Adler" entity fields.

POST /read {
    "nodeId": "frn:entity::IreneAdler",
    "template": [
        ":PersonName",
        ...
    ]
}

Factern will call the interface ADD endpoint with the "Irene Adler" Factern Id.

POST https://acme.com/add?nodeId=000000000FA91BF1B1084BC5697DB361B5B72B007F4DA1FC

In this case, the interface endpoint implementation includes a write of "Irene Adler"'s latest data.

POST /write {
    "nodeId": "frn:entity::IreneAdler",
    "document": [
        {":PersonName": "Irene Adler"},
        ...
    ],
}

The response from the read now includes the "Irene Adler" up-to-date data.

Read Response
[{
    "status": 200,
    "readItem": {
        "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A,
        "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
        "data": "Irene Adler"
    },
    ...
}]

Application Required Scopes

A statement can be made against an application to associate one or more required scopes. Whenever a permission is granted to an application, a permission will be created for each associated required scope.

Example

We create a requiresScope statement. Note that the actionId for this type of statement is CAD6E3BD-7DDA-4979-9E6D-2353106A789E.

POST /createstatement {
    "targetNodeId": ":MyApplication",
    "actionId": "CAD6E3BD-7DDA-4979-9E6D-2353106A789E",
    "actionQualifierId": ":ScopeRequiredByMyApplication"
}

Now we grant permission to MyApplication.

POST /permission {
    "targetNodeId": "000000001ADE8A80023B7E090594227905A5D8DC5C1212A0",
    "policy": {
        "effect": "Allow",
        "applicationId": ":MyApplication",
        "actions": ["Application"]
    }
}

This results in the creation of a read permission with scope ScopeRequiredByMyApplication.

Base URLs:

Email: Factern Ltd. Web: Factern Ltd. License: All rights reserved

Authentication

Scope Scope Description
address Grants read access
email Grants read and write access to administrative information
openid Grants read and write access to administrative information
phone Grants write access
profile Grants read and write access to administrative information

Facts

createAlias

POST /createalias

Create Alias

For creating a node alias. Once created, the node can be referenced by its alias in any place where it could be referenced by its Factern Id using the syntax @alias.

Aliases, by default, are globally unique. However, they can be reassigned by deleting the alias node and creating a new alias that targets a different entity.

Local aliases can be created by setting the local property to true. A local alias is visible only within the scope of the alias creating login. Note that local aliases can be used to hide global aliases. That is, a local alias can use the same name as a global alias, effectively making that global alias inaccessible from the local alias creating login.

A node can have more than one alias. Deleting a node with an alias does not delete the alias. An alias node can itself have an alias.

Example

In this example, we create an alias for an entity, having Factern Id "0000000024CAD703CD904D88EDD10DE4543F7925E70B5BDC", and then describe that entity using its alias. We then delete the alias and create an alias for a different entity, having Factern Id "00000000E2A5842459DC89B85BA0BEC554CD1A37FCF84B55".

POST /createalias {
    "targetNodeId": "0000000024CAD703CD904D88EDD10DE4543F7925E70B5BDC",
    "name": "Watson",
    "description": "Alias for the Dr. Watson entity"
}

Response

{
    ...
    "nodeId": "000000008D315993C02F32DEE13637CCD4A1280F34A79D50",
    "parentId": "0000000024CAD703CD904D88EDD10DE4543F7925E70B5BDC",
    "name": "Watson",
    "description": "Alias for the Dr. Watson entity",
    ...
}

We describe the entity, using the alias instead of the entity's Factern Id.

POST /describe {
    ...
    "nodeId": "@Watson",
    ...
}

Response

{
    ...
    "nodeId": "0000000024CAD703CD904D88EDD10DE4543F7925E70B5BDC",
    ...
}

We delete the alias. Take care that you use the nodeId of the alias and not the entity!

POST /deletenode {
    "nodeId": "000000008D315993C02F32DEE13637CCD4A1280F34A79D50"
}

We create the alias, targeting a different entity.

POST /createalias {
    "targetNodeId": "00000000E2A5842459DC89B85BA0BEC554CD1A37FCF84B55",
    "name": "Watson",
    "description": "Alias for the Dr. Watson entity"
}

Response

{
    ...
    "nodeId": "00000000A29EAEA33949E326DAA8D1550F3FA856BB1AC894",
    "parentId": "00000000E2A5842459DC89B85BA0BEC554CD1A37FCF84B55",
    "name": "Watson",
    "description": "Alias for the Dr. Watson entity",
    ...
}

Subaliases

A subalias is just an alias containing one or more periods. For example, the alias @london.detectives is a subalias of the base alias @detectives. A subalias can be created just like a regular alias, but with the additional restriction that the creating login must also have been the creator of the base alias.

Example

In this example, we create an alias for a group of people entities. The group has the name PeopleEntities, and we assign the alias people to it. We then create a subalias for another group of people entities associated with the city of London. The group has the name LondonPeopleEntities, and we assign the subalias london.people to it.

POST /createalias {
    "targetNodeId": "frn:group::PeopleEntities",
    "name": "people",
    "description": "Alias for the collection of all people entities"
}
POST /createalias {
    "targetNodeId": "frn:group::LondonPeopleEntities",
    "name": "london.people",
    "description": "Alias for the collection of all people entities associated with the city of London"
}

If the creator of the london.people alias was any login other than the creator of the people alias, the create would have failed with status code 400.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateAliasRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateAliasResponse

createApplication

POST /createapplication

Create Application

All data created must be associated with a creating application. All data accessed are accessed using the permissions associated with an application.

Example

In this example, we create an application.

POST /createapplication {
    "name": "PayrollApp",
    redirectUris: ["http://acme.com/profile"]
}

Response includes the Factern Id of the created application.

{
    "nodeId": "000000007A69840D125F1664C0921E73BDEAE0D66D8C9829"
}

Note that like any request, the application creation is done in the context of an authenticated login and application. As such, your first application must be created using the Dev Portal https://portal.factern.com/#/login.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateApplicationRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateApplicationResponse

bid

POST /createbid

Create Bid

Any agent that has access to an entity and to the entity's price can place a bid on the facts covered by the price. If accepted, the bidder agent is given access to the facts based on the policy specified in the price, and the bidder agent's account balance is debited with value of the price.

Example

POST /createbid {
    "priceId": "00000000A5645604E38CC4CF6353919F5D23CBC62A3FB7CE"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateBidRequest false none

Responses

Status Meaning Description Schema
200 OK OK StandardNodeResponse

createDomain

POST /createdomain

Create Domain

By default, all facts are created in the local fact table. However, it is possible to create facts in remote fact tables by defining and using a domain. A domain definition will declare endpoints for adding, retrieving, and (optionally) querying facts. It is up to the remote domain to implement proper semantics.

When creating login or entity nodes, the Domain Id can be specified. The node will be created in that domain, provided the remote service is correctly implemented. Login and entity nodes with no Domain Id specified will be created in the domain of their parent. All other nodes will also be created in the domain of their parent.

A node's domain can be inferred from its Factern Id by the most significant 32 bits. For example, a node with Factern Id 2D51FAC37A69840D125F1664C0921E73BDEAE0D66D8C9829 has a Domain Id of 2D51FAC3.

Example

In this example, we create a domain, give it a name (optional), and create an entity in that domain. We will then create a child entity without specifying a Domain Id and see that it inherits the Domain Id of its parent. We create a domain.

POST /createdomain {
    ...
    "addFact": {"url": "https://facts.acme.com/add"},
    "getFact": {"url": "https://facts.com/get"},
    "queryFacts": {"url": "https://facts.com/query"},
    "name": "AcmeDomain"
    ...
}

The response contains the created domains's Domain Id. Note the domain's Factern Id is its Domain Id, left padded with 0s. Response

{
    ...
    "nodeId": "00000000000000000000000000000000000000002D51FAC3",
    "domainId": "2D51FAC3",
    ...
}

In a subsequent creation of an entity node, we specify the domain's Factern Id.

POST /createentity {
    ...
    "domainId": "00000000000000000000000000000000000000002D51FAC3",
}

The entity's Factern Id is returned. Note that the upper 32 bits are its Domain Id 2D51FAC3. Response

{
    ...
    "nodeId": "2D51FAC379C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

Factern will have called the domain ADD endpoint with a fact that corresponds to the entity node. It is up to the endpoint's implementation to implement proper creation semantics. In a subsequent creation of an entity node, we specify the parent's Factern Id.

POST /createentity {
    ...
    "parentId": "2D51FAC379C27D120B58F74C683639EE72EA2E33B93293CB",
}

The entity is created in the same domain.

Response {
    ...
    "nodeId": "2D51FAC3926097BF7B85454CDB078293E67E620A719A2CC2",
    ...
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateDomainRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateDomainResponse

createEntity

POST /createentity

Create Entity

Entities are basic element for representing permissionable items. Permissions set on entities are inherited by all associated information nodes.

Example

In this example, we create an entity under another entity having Factern Id 00000000AF555988FBD9494419C26BBCD299A6314EAC0844

POST /createentity {
    "parentId": "000000001A800FF23D27E58B90DD1008B3E5547E235B77F4",
    "name": "JohnWatsonNode"
}

Response includes the Factern Id of the created entity.

{
    "nodeId": "00000000B87881B8F1187838A10D27B9E2A4A1AFD92D861A"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateEntityRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateEntityResponse

createField

POST /createfield

Create Field

Every information node must have an associated field type that describes the information. Note that there are two major types of field types: branch and leaf. An information node having a branch field type has no associated data, but can parent other information. A information node having a leaf field type must have associated data and cannot parent other information.

The field type name must be unique within the associated login.

Example

In this example, we create a searchable field type We create the searchable type.

POST /createfield {
    "name": "FullName"
    "searchable": "true",
    ...
}

Response includes the Factern Id of the created field type.

{
    ...
    "nodeId": "000000000D9955617980254688D7A0F138A94CA8D3ECB0B5",
    ...
}

We create an information node under an entity having Factern Id 000000007B85454CDB078293E67E620A719A2CC24530F504.

POST /createinformation {
    ...
    "parentId": "000000007B85454CDB078293E67E620A719A2CC24530F504",
    "fieldId": ":FullName",
    "data": "Alice Holmes"
}

The information's Factern Id is returned.

Response {
    ...
    "nodeId": "00000000B8E2BDED46BBDDEA98D842316435CD0B890E54E3",
    ...
}

We now search for all entities having an information node starting with value "Alice".

POST /searchentity {
    ...
    "fieldId": ":FullName",
    "operator": "startsWith",
    "term": "Alice"
}

Response includes the matching entity.

{
    "nodes": [{
        "nodeId": "000000007B85454CDB078293E67E620A719A2CC24530F504",
        ...
    }]
}

Example

In this example, we create a branch field type

POST /createfield {
    "name": "SalesLeads"
    "branch": "true",
    ...
}

Response includes the Factern Id of the created field type.

{
    ...
    "nodeId": "00000000A45B1AF797D8BD7FFF9646E28FFDCCA5DF993E1C",
    ...
}

We create an information node under the entity.

POST /createinformation {
    ...
    "parentId": "00000000AF555988FBD9494419C26BBCD299A6314EAC0844",
    "fieldId": ":SalesLeads"
}

The branch information's Factern Id is returned.

Response {
    ...
    "nodeId": "00000000043F63F456185E40CEC633593ABCD93200B54583",
    ...
}

And a searchable information node under the branch information.

POST /createinformation {
    ...
    "parentId": "00000000043F63F456185E40CEC633593ABCD93200B54583",
    "fieldId": ":FullName",
    "data": "Alice Holmes"
}

We now search for all entities having an information node with value "abc".

POST /searchentity {
    ...
    "fieldId": ":FullName",
    "operator": "startsWith",
    "term": "Alice"
}

Response includes the matching entity. Note that even though the information was not directly under the entity, the entity is still matched.

{
    "nodes": [{
        "nodeId": "00000000AF555988FBD9494419C26BBCD299A6314EAC0844",
        ...
    }]
}

Example

In this example, we create a uniqueByParent field type

POST /createfield {
    "name": "EyeColour"
    "uniqueByParent": true,
    ...
}

Response includes the Factern Id of the created field type.

{
    ...
    "nodeId": "000000008BE86D4383D08AA7B1F02311D76516F7312CFFA3",
    ...
}

We create an information node under entity with Factern Id 00000000AF555988FBD9494419C26BBCD299A6314EAC0844.

POST /createinformation {
    ...
    "parentId": "00000000AF555988FBD9494419C26BBCD299A6314EAC0844",
    "fieldId": ":EyeColour",
    "data": "Blue"
}

But if we repeat the previous information node creation, the response is HTTP status 409, Conflict, due to the fact that we can only have one information node directly under that entity with the given field type.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateFieldRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateFieldResponse

createFilter

POST /createfilter

Create Filter

A filter is set of statements that can be evaluated against a node. The filter evaluates to true if all statements evaluate to true, and false otherwise.

A filter statement consists of a field and an argument list.

Example

In this example, we create a filter that evalutes to true for all nodes that are children of 00000000AF555988FBD9494419C26BBCD299A6314EAC0844 and have a Factern Id that are either 000000008BE86D4383D08AA7B1F02311D76516F7312CFFA3 OR 00000000043F63F456185E40CEC633593ABCD93200B54583.

POST /createfilter {
  ...
    "statements": "[
      {
        "field":"Target",
        "arguments":["00000000AF555988FBD9494419C26BBCD299A6314EAC0844"]
      },
      {
        "field":"Id",
        "arguments":["000000008BE86D4383D08AA7B1F02311D76516F7312CFFA3", "00000000043F63F456185E40CEC633593ABCD93200B54583"]
      }
    ]"
    ...
}

Response includes the Factern Id of the created filter.

{
    ...
    "nodeId": "000000000D9955617980254688D7A0F138A94CA8D3ECB0B5",
    ...
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateFilterRequest false none

Responses

Status Meaning Description Schema
201 Created Created CreateFilterResponse

createGroup

POST /creategroup

Create Group

Groups are collections of nodes. All nodes in a group must be of a particular fact type, if one is specified, or may contain members of all types if the group's fact type is left unspe. For groups of logins, permissions can be granted on groups in the same way that they can be granted on individual entities.

Example

In this example, we create a group of logins, and set permissions, accordingly. We create a group. We already have two logins with Factern Ids 00000000DC9BD86B79F3F0DFDD22D293695EE23F397449B7 and 00000000F21C36AD0211C0E859DEFFA431CAC0A425D5BAEE.

POST /creategroup {
    "name": "DetectiveLogins",
    "memberFactType": "Login",
    "memberIds": [
        "00000000DC9BD86B79F3F0DFDD22D293695EE23F397449B7",
        "00000000F21C36AD0211C0E859DEFFA431CAC0A425D5BAEE"
    ]
}

Response includes the Factern Id of the created group.

{
    ...
    "nodeId": "0000000078F098BDE117D9831865E08AE77B5F0866A2568E",
    ...
}

Group Factern Id can be used in grantee of permission request

POST /permission {
    ...
    "policy": {
        ...
        "granteeId": ":DetectiveLogins"
    }
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateGroupRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateGroupResponse

createInformation

POST /createinformation

Create Information

An information node always has an associated field type. If the field type is a leaf, then the information node has associated data. If the field type is a branch, then the information node has no associated data but instead can be used to parent other information nodes.

An information node with a leaf field type can optionally be created with a storageId, which specifies an alternative storage for the associated data. If a storageId is not specified, the data is stored in the Factern default storage.

Note that the storageId is the Factern Id of an interface created using the /createinterface endpoint.

Example

In this example, we create a branch information node and then a leaf information node under the branch We create the field type.

POST /createfield {
    "name": "Detectives",
    "branch": "true",
    ...
}

Response includes the Factern Id of the created field type.

{
    ...
    "nodeId": "000000008029289F643854A1FE32F2EB69DEDFDD54B40EA9",
    ...
}

We create an information node under the entity with Factern Id 00000000AF555988FBD9494419C26BBCD299A6314EAC0844.

POST /createinformation {
    ...
    "parentId": "00000000AF555988FBD9494419C26BBCD299A6314EAC0844",
    "fieldId": ":Detectives",
}

Response includes the Factern Id of the created information.

{
    ...
    "nodeId": "00000000EC3C7555E09D4C2F1744E8E5E4F7794C3054051B",
    ...
}

We create a second leaf field type.

POST /createfield {
    "name": "FullName"
    "branch": "false",
    ...
}

Response includes the Factern Id of the created field type.

{
    ...
    "nodeId": "000000002FD4CF69CDC086CE295095A5F44167B9491B2836",
    ...
}

We create an information node under the previously created information node having a branch field type.

POST /createinformation {
    ...
    "parentId": "00000000EC3C7555E09D4C2F1744E8E5E4F7794C3054051B",
    "fieldId": ":FullName",
    "data": "Sherlock Holmes"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateInformationRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateInformationResponse

createInterface

POST /createinterface

Create Interface

An interface is a representation of an externally callable web API.

An interface is simply a triplet of http endpoints: an endpoint for writing data; an endpoint for reading data; and an endpoint for removing data. What those endpoints should expect payload-wise depends on how the interface is being used.

Example

In this example, we create an interface, give it a name (optional), and use that interface as a storage for information node data. We create an interface.

POST /createinterface {
    ...
    "addData": {"url": "https://acme.com/add"},
    "getData": {"url": "https://acme.com/get"},
    "deleteData": {"url": "https://acme.com/delete"},
    "name": "BulkStorageInterface"
    ...
}

The response contains the created interface's Factern Id Response

{
    ...
    "nodeId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC",
    ...
}

In a subsequent creation of a information node, we specify the interface's Factern Id.

POST /createinformation {
    "parentId":"0000000005D460B37CB008CA9476876DB924F1F7B0D7DDAE",
    "fieldId":"0000000017CE2CED136F2F8EF27DDBBF6DD2EEBE8CF00871",
    "storageId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC",
    "data": "Baker Street"
}

The information's Factern Id is returned.

Response {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

Factern will have called the interface ADD endpoint with the information's Factern Id and value. It is up to the endpoint's implementation to implement proper storage semantics.

POST https://acme.com/add?nodeId=0000000079C27D120B58F74C683639EE72EA2E33B93293CB my value

Now we read the information value, specifying the information's Factern Id.

POST /readinformation {
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB"
}

The interface GET endpoint will be called with the information's Factern Id. The field type and owning entity IDs are also included in the query string.

POST https://acme.com/get?nodeId=0000000079C27D120B58F74C683639EE72EA2E33B93293CB&x-factern-fieldTypeId=0000000017CE2CED136F2F8EF27DDBBF6DD2EEBE8CF00871&x-factern-owningEntityId=0000000005D460B37CB008CA9476876DB924F1F7B0D7DDAE

If the interface has properly implemented storage semantics, we would expect the following value to be returned from the interface as well as from Factern.

{
    "data": "Baker Street"
}

Example

In this example we show how to make an indirect call using an interface. In this case, the external endpoint is of form https://example.com/users/{userId}/name. Additionally, let us say this endpoint requires we make a GET and specify a header to indicate we accept "application/json". We create the interface.

POST /createinterface {
    ...
    "addData": {
        "type": "Indirect",
        "url": "https://acme.com/users/{userId}/name",
    },
    "getData": {
        "type": "Indirect",
        "url": "https://acme.com/users/{userId}/name",
        "method": "GET",
        "headers": [{
            "key": "Accepts",
            "value": "application/json"
        }]
    },
    "name": "AcmeNameSource"
    ...
}

Note that the URL for both the addData and getData must be identical. Note that URL has a parameter userId that we will supply when we write to the interface. When we write an information node having that storage interface, we are writing the parameters that are to be used on subsequent reads against the interface. For example,

POST /createentity {
    ...
    "name": "Moriarty"
}
POST /createfield {
    ...
    "name": "AcmeName"
}
POST /write {
    ...
    "nodeId": "frn:entity::Moriarty",
    "document": [
        {
            ":AcmeName": {
                "data": "{\"userId\": \"moriarty-123\"}",
                "storageId": "frn:interface::AcmeNameSource"
            }
        }
    ]
}

We are actually writing a fully escaped JSON document to the node of the parameters to be used subsequently on the interface getData endpoint. In this case, we are supplying a single parameter, usedId having value "moriarty-123". A subsequent read uses the written parameters to call against the interface. Example:

POST /read {
   "nodeId":"frn:entity::Moriarty",
   "template": [
        ":AcmeName"
    ]
}

actually makes a call against the interface read endpoint:

POST https://acme.com/users/moriarty-123/name

Depending on the implementation of the read endpoint the read response might contain:

{
    "items": [{
        "readItem": {
            "fieldId": "000000006EA460441ED31AF4B111567E6C3C4DB45E07F234",
            "nodes": [],
            "nodeId": "00000000F010BFBA02DAD6F4290CD335E8D5F4F2764109D5",
            "data": "{\"first\": \"James\", \"last\": \"Moriarty\"}",
            "children": []
        },
        "status": 200
    }]
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateInterfaceRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateInterfaceResponse

createLabelList

POST /createlabellist

Create Label List

A label list is a collection of logically consistent labels. The label members can be used in the /label endpoint to label data.

Example

We create a label list representing the confirmation status of a information node's data.

POST /createlabellist {
    ...
    "name": "ConfirmationStatus",
    "members": [
        "Unconfirmed",
        "Rejected",
        "Confirmed"
    ]
}

Response

{
    ...
    "nodeId": "00000000C125606D13DCE6AD6A1D2B6969C2863C4FAB050B",
    "members": [{
        ...
        "name": "Confirmed",
        "nodeId": "00000000A1AF37B270DE7EED4EE881021B678D4D8518D4ED"
    },...]
}

We now label an existing information node with Factern Id 00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70 as Confirmed by using the Factern Id of the Confirmed label.

POST /label {
    "targetNodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
    "labelId": "00000000A1AF37B270DE7EED4EE881021B678D4D8518D4ED"
}

We could also use the FRN of the Confirmed label.

POST /label {
    "targetNodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
    "labelId": "frn:labellistmember::ConfirmationStatus/Confirmed"
}

Finally we list the labels of the information node filtering results using the ConfirmationStatus label list.

POST /describe {
    ...
    "nodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
    "listChildren": {
        "factType": "Label",
        "labelListId": ":ConfirmationStatus"
    }
}

Response

{
    ...
    "children": [{
        "targetNodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
        "memberId": "00000000A1AF37B270DE7EED4EE881021B678D4D8518D4ED"
    }]
}

Showing that the information node was labelled with the label corresponding to the Confirmed status.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateLabelListRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateLabelListResponse

createLogin

POST /createlogin

Create Login

All data created must be associated with a creating login. All data accessed are accessed using the permissions associated with a login.

Example

In this example, we create a login.

POST /createlogin {
    "email": "alice@acme.com",
    "password": "mypassword",
    "workflow": "APP_INITIATED"
}

Response includes the Factern Id of the created login.

{
    "nodeId": "000000008CE3F53C41ED38CD958DE6F8D485525D02AF6944"
}

Note that like any request, the login creation is done in the context of an authenticated login and application. As such, your first login must be created using the Dev Portal https://portal.factern.com/#/login.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateLoginRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateLoginResponse

addMember

POST /createmember

Create Member

For adding a member to an existing group, template, or scope. Note that for permissions, with respect to the new member permission changes are immediately reflected.

Example

In this example, we have a group of logins, and add a new login. We create a group. We already have two logins with Factern Ids 00000000DC9BD86B79F3F0DFDD22D293695EE23F397449B7 and 00000000F21C36AD0211C0E859DEFFA431CAC0A425D5BAEE.

POST /creategroup {
    "name": "DetectiveLogins",
    "memberIds": [
        "00000000DC9BD86B79F3F0DFDD22D293695EE23F397449B7",
        "00000000F21C36AD0211C0E859DEFFA431CAC0A425D5BAEE"
    ]
}

Response includes the Factern Id of the created group.

{
    ...
    "nodeId": "000000008BE86D4383D08AA7B1F02311D76516F7312CFFA3",
    ...
}

Add login with Factern Id 00000000781841F6917E1CD0F626849C47CF5392E0AFD46E

POST /createmember {
    "parentId": ":DetectiveLogins",
    "memberId": "00000000781841F6917E1CD0F626849C47CF5392E0AFD46E"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateMemberRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateMemberResponse

createMirror

POST /createmirror

Create Mirror

A mirror consists of a source entity node, a destination entity node, and a template. Any updates to the source entity that is covered by the mirror's template will be automatically propagated to the destination entity node.

Example

In this example, we create two entities, a template and a mirror. Then we write to the source entity using the template and see that the destination entity is also changed to reflect that write. We create two entities, each representing John Watson. The first entity is created under Her Majesty's Revenue and Customs and the second entity is created under London Police Department Consultants. The purpose of the mirror is to automatically update the latter whenever the former is updated.

POST /createentity {
    "parentId": "@HMRevenueAndCustoms"
}

Response

{
    ...
    "nodeId": "00000000A797A4951E939886BA465B9EFABFCD2E5B9131A7",
    ...
}
POST /createentity {
    "parentId": "@LondonPDConsultants"
}

Response

{
    ...
    "nodeId": "00000000020E67C874812302B5967F0458452B7432F8E89B",
    ...
}

Create some fields and a template.

POST /createfield {
    "name": "Spouse"
    "branch": "true",
    ...
}
POST /createfield {
    "name": "FullName"
    "branch": "true",
    ...
}
POST /createfield {
    "name": "FirstName"
    "branch": "false",
    ...
}
POST /createfield {
    "name": "LastName"
    "branch": "false",
    ...
}
POST /createtemplate {
    ...
    "name": "SpouseProfile",
    "memberIds": [
        ":Spouse": {
            ":FullName": [
                ":FirstName",
                ":LastName"
            ]
        }
    ]
}

Create the mirror.

POST /createmirror {
  "sourceNodeId": "00000000A797A4951E939886BA465B9EFABFCD2E5B9131A7",
  "destinationNodeId": "00000000020E67C874812302B5967F0458452B7432F8E89B",
  "templateId": ":SpouseProfile"
}

Update the entity under @HMRevenueAndCustoms using the SpouseProfile template.

POST /write {
    "templateId": ":SpouseProfile",
    "nodeId": "00000000A797A4951E939886BA465B9EFABFCD2E5B9131A7",
    "values": [
        "Mary",
        "Morstan"
    ]
}

Reading the entity under @LondonPDConsultants would verify that it has been updated with spousal information.

POST /read {
    "templateId": ":SpouseProfile",
    "nodeId": "00000000020E67C874812302B5967F0458452B7432F8E89B"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateMirrorRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateMirrorResponse

createPrice

POST /createprice

Create Price

Prices can be set upon entities. An entity forms the root of a document. For example, there may be an “Alice” entity that roots the document describing Alice’s name, address and contact info. The price attached to the entity can either be for selling access to all facts off the entity, or just a subset of the facts.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreatePriceRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreatePriceResponse

createScope

POST /createscope

Create Scope

Scopes are collections of templates or filters. Scopes are used in permissioning to bring together a set of nodes all having the same permissions.

The scope name must be unique within the associated logins.

Example

In this example, we create a scope containing templates with Factern Ids 00000000A5ABACFABC029D2A526291DDF04559242F286757 and 00000000AE5AA31410B5AABEEE9E981A890CD932F21C3204 and filters with Factern IDs 000000002B46D4331F76C89EE12CC82E9CA87EFFFA695CC0 and 00000000F33F1BBE66809D4B5682A6823744AB253AE99F51. The scope is created

POST /createscope {
    "name": "NameAndAddressScope",
    "templateIds": [
        "00000000A5ABACFABC029D2A526291DDF04559242F286757",
        "00000000AE5AA31410B5AABEEE9E981A890CD932F21C3204"
    ],
    "filterIds": [
        "000000002B46D4331F76C89EE12CC82E9CA87EFFFA695CC0",
        "00000000F33F1BBE66809D4B5682A6823744AB253AE99F51"
    ]
}

Response

{
    ...
    "nodeId": "000000006FAEA1DC636C002361474CC34C022EE68F8A8844",
    "name": "NameAndAddressScope",
    "memberIds": [
        "00000000A5ABACFABC029D2A526291DDF04559242F286757",
        "00000000AE5AA31410B5AABEEE9E981A890CD932F21C3204",
        "000000002B46D4331F76C89EE12CC82E9CA87EFFFA695CC0",
        "00000000F33F1BBE66809D4B5682A6823744AB253AE99F51"
    ]
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateScopeRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateScopeResponse

createStatement

POST /createstatement

Create Statement

Statements are facts that bring together a target node with some specific action. The action id must be chosen from a list of supported actions, as there is not a way to create new actions at this time. Depending on the action, the statement may require an additional qualifying node.

Example

In this example, we create a statement to indicate that the entity with id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0 has an interface that will be called prior to any template read applied to the entity. In this case it is an interface that loads information nodes under the entity as needed.

POST /createstatement {
    "targetNodeId": "000000001ADE8A80023B7E090594227905A5D8DC5C1212A0",
    "actionId": "000000000000000034375CE3851C457F96D7D4C6115EB91E",
    "actionQualifierId": "frn:interface::LazyLoadProfileData"
}

Response

{
    ...
    "nodeId": "000000006FAEA1DC636C002361474CC34C022EE68F8A8844",
    "targetNodeId": "000000001ADE8A80023B7E090594227905A5D8DC5C1212A0",
    "actionId": "000000000000000034375CE3851C457F96D7D4C6115EB91E",
    "actionQualifierId": "00000000DF4E39037F12CE796786C1217BDC72A6FC1B43DE"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body AddStatementRequest false none

Responses

Status Meaning Description Schema
200 OK OK AddStatementResponse

createTemplate

POST /createtemplate

Create Template

Templates are collections of field types. They are used in the /read and /write endpoints for reading and writing data in bulk.

The template name must be unique within the associated login.

Example

In this example we have created a set of fields that define a Person's name, and basic street address with street and city parts. The responses from the creation of the fields:

{
    ...
    "branch": false,
    "uniqueByParent": true,
    "nodeId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
    "name": "PersonName"
} {
    ...
    "branch": true,
    "uniqueByParent": true,
    "nodeId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
    "name": "BasicAddress"
} {
    ...
    "branch": false,
    "uniqueByParent": true,
    "nodeId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
    "name": "Street"
} {
    ...
    "branch": false,
    "uniqueByParent": true,
    "nodeId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
    "name": "City"
}

A template is created with the fields.

POST /createtemplate {
    ...
    "name": "PersonProfile",
    "memberIds": [
        ":PersonName",
        {
            ":BasicAddress": [
                ":Street",
                ":City"
            ]
        }
    ]
}

Note that the BasicAddress has sub-fields for the City and Street. The response includes a description of the template as well as its nodeId. Response

{
    ...
    "nodeId": "00000000674AF75DB0F4F1DF9713E09296687718E8157EA3",
    "name": "PersonProfile",
    "memberIds": [
        "000000000F1CF39B817D2845799BA7A143C5772336730EE6",
        {
            "0000000021C7084D540A7029E7A7E0ED036C7F466B252F9A": [
                "00000000D3D5AF38B916AF963CF25ADCAE74ABFD11C3E583",
                "00000000DDD315F7078EDEBC403D7C22C9436524F012C67B"
            ]
        }
    ]
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateTemplateRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateTemplateResponse

delete

POST /delete

Deleting

For deleting information data.

The nodeId must be an entity and the template is used to find the information nodes to delete relative to the entity.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body DeleteRequest false none

Responses

Status Meaning Description Schema
200 OK OK DeleteResponse

deleteNode

POST /deletenode

Delete Node

Delete marks a node as deleted. It will no longer be listable via the /describe endpoint. The data is not actually deleted. To remove data, see Obliterate.

Example

In this example, we create and then delete an information node. The information node has field type with Factern Id and parent entity having Factern Ids 0000000016270565667CE604DD4DF499C2A31FF6D2072FD7 and 00000000571749C62247EC65D43151C296366C4EF48658A9, respectively.

POST /createinformation {
    ...
    "parentId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "fieldId": ":Street",
    "data": "Inverness Terrace"
}

The information node's Factern Id is returned.

Response {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

We list the information nodes of the entity filtering results using the field type.

POST /describe {
    ...
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "listChildren": {
        "factType": "Information",
        "fieldId": ":Street"
    }
}

The response

{
    ...
    "children": [{
        "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
        ...
    }]
}

Now we delete the previously created information node.

POST /deletenode {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB"
}

The same describe as before is invoked and now returns an empty list. Response

{
    ...
    "children": []
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body NodeIdRequest false none

Responses

Status Meaning Description Schema
200 OK OK StandardNodeResponse

describe

POST /describe

Describe

Describe is used to describe nodes and statements as well as optionally the children of nodes and statements. List includes arguments for allowing paging in the case of large numbers of children. To receive associated statements of a node, the field type of the statement must be explicitly added via the filter.

Example

In this example, we create several information nodes under an entity, and then describe the information nodes.

POST /createinformation {
    ...
    "parentId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "fieldId": ":Street",
    "data": "Inverness Terrace"
}
POST /createinformation {
    ...
    "parentId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "fieldId": ":Street",
    "data": "Gloucester Place"
}
POST /createinformation {
    ...
    "parentId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "fieldId": ":Street",
    "data": "Baker Street"
}

We describe the entity.

POST /describe {
    ...
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9"
}

The response includes only a description of the entity

{
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "factType": "Entity",
    ...
}

We list the information nodes of the entity filtering results using the field type.

POST /describe {
    ...
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "listChildren": {
        "factType": "Information",
        "fieldId": ":Street"
    }
}

The response includes a description of the entity and the information nodes having the given field type.

{
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "factType": "Entity",
    ...
    "children": [{
        "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
        ...
    },
    {
        "nodeId": "00000000A2019243964B5E357392DC5C0A5DEF074F3ED504",
        ...
    }]
}

We can also describe the entity with generateTemplate=true.

POST /describe {
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "generateTemplate": true
}

The response will include a template that describes the fields of the information nodes under it.

{
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "factType": "Entity",
    "memberIds": ["<nodeId of Street field type>"]
    ...
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body DescribeRequest false none

Responses

Status Meaning Description Schema
200 OK OK DescribeResponse

history

POST /history

History

History runs the replace statements up and down the chain to return the full history of a node. The node given can be any node in the chain of replacements. Giving any point from "version 1" to "version n" nodeId will produce the same result.

The node list returned is not guaranteed to be ordered but does provide a sequenceNumber property which you can sort by to find the first/last or in between version. Sort ascending for old to new, descending for new to old.

History on non-info nodes may return a list of two versions if, and only if, the non-info node has been deleted. This is because replace is not exposed for non-info nodes at this time.

Example

In this example, we create and replace an information node, and then list the information versions. The information has field type and parent entity having Factern Ids 0000000016270565667CE604DD4DF499C2A31FF6D2072FD7 and 00000000571749C62247EC65D43151C296366C4EF48658A9, respectively.

POST /createinformation {
    ...
    "parentId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "fieldId": "0000000016270565667CE604DD4DF499C2A31FF6D2072FD7",
    "data": "Alice"
}

The information node's Factern Id is returned.

Response {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

Now we replace the information node.

POST /replaceinformation {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    "data": "Allison"
}

The replacement information node's Factern Id is returned.

Response {
    ...
    "nodeId": "000000007611AD504DBF600078DF929DD98EAE4787B4D87A",
    ...
}

The history of the information node is called, and shows the Factern Ids of the original and replacement.

POST /history {
    ...
    "nodeId": "000000007611AD504DBF600078DF929DD98EAE4787B4D87A"
}

Response

{
    "nodes": [{
        "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
        "sequenceNo": "0"
        ...
    },
    {
        "nodeId": "000000007611AD504DBF600078DF929DD98EAE4787B4D87A",
        "sequenceNo": "1"
        ...
    }]
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body NodeIdRequest false none

Responses

Status Meaning Description Schema
200 OK OK NodeListing

label

POST /label

Label a Node

Example

We create a label list representing the confirmation status of an information node's data.


POST /createlabellist
{
    ...
    "name": "ConfirmationStatus",
    "members": [
        "Unconfirmed",
        "Rejected",
        "Confirmed"
    ]
}

Response


{
    ...
    "nodeId": "00000000C125606D13DCE6AD6A1D2B6969C2863C4FAB050B",
    "members": [{
        ...
        "name": "Confirmed",
        "nodeId": "00000000A1AF37B270DE7EED4EE881021B678D4D8518D4ED"
    },...]
}

We now label an existing information node with Factern Id 00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70 as Confirmed by using the Factern Id of the Confirmed label.


POST /label
{
    "targetNodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
    "labelId": "00000000A1AF37B270DE7EED4EE881021B678D4D8518D4ED"
}

We could also use the FRN (or short FRN) of the Confirmed label to do the same thing.


POST /label
{
    "targetNodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
    "labelId": ":ConfirmationStatus/Confirmed"
}

Finally we list the labels of the information node filtering results using the ConfirmationStatus label list.


POST /describe
{
    ...
    "nodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
    "listChildren": {
        "factType": "Label",
        "labelListId": ":ConfirmationStatus"
    }
}

Response


{
    ...
    "children": [{
        "targetNodeId": "00000000FB76E443E8F923ED5B43CFEF7233F3E278836D70",
        "memberId": "00000000A1AF37B270DE7EED4EE881021B678D4D8518D4ED"
    }]
}

Showing that the information node was labelled with the label corresponding to the Confirmed status.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body AddLabelRequest false none

Responses

Status Meaning Description Schema
200 OK OK AddLabelResponse

obliterate

POST /obliterate

Obliterating Information Nodes

Obliterate removes the data associated with a node. Only information nodes can be targeted by obliterate. After a call to obliterate you will not be able to retrieve the data.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body NodeIdRequest false none

Responses

Status Meaning Description Schema
200 OK OK StandardNodeResponse

permission

POST /permission

Create Permission

By default, a login's data is not accessible in any way by any other login. It is only by creating permissions that a login can make its data accessible. Permissions can either be created with an explicit policy, or can be created asynchronously via an external interface. In either case, a policy can always have an expiry. In the asynchronous case, the policy is only created as each attempted access occurs.

Permissions specified with a requestInterfaceId are called Requestable Permissions. If an agent otherwise matches the permission policy, then the status code returned when reading the target node will be the special status code 477. The /requestpermission endpoint can be used for requesting the permission be granted.

In the case that a node has more than one associated Requestable Permission the most specific matching requestable permission is used. If there is more than one such requestable permission, then the requestable permission used is arbitrary.

Note that requestable permissions only matter if an agent is not otherwise allowed by non-requestable permissions.

Example

In this example, we grant login with Factern Id 00000000301D1F22157CE46BAAB422C13F0F368218027D50 using application with Factern Id 00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896 to be able to read information node with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0

POST /permission {
    "targetNodeId": "00000000FCDF978BA9BFAE5D1DEC365B59A249A6B01E3987",
    "policy": {
        "effect": "Allow",
        "granteeId": "00000000301D1F22157CE46BAAB422C13F0F368218027D50",
        "applicationId": "00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896",
        "actions": ["Read"]
    }
}

Example

In this example, an application is not specified so login with Factern Id 00000000301D1F22157CE46BAAB422C13F0F368218027D50 can use any application to read information node with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0

POST /permission {
    "targetNodeId": "00000000FCDF978BA9BFAE5D1DEC365B59A249A6B01E3987",
    "policy": {
        "effect": "Allow",
        "granteeId": "00000000301D1F22157CE46BAAB422C13F0F368218027D50",
        "actions": ["Read"]
    }
}

Example

In this example, a grantee is not specified so any login using application with Factern Id 00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896 will be able to read information node with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0

POST /permission {
    "targetNodeId": "00000000FCDF978BA9BFAE5D1DEC365B59A249A6B01E3987",
    "policy": {
        "effect": "Allow",
        "applicationId": "00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896",
        "actions": ["Read"]
    }
}

Example

In this example, no grantee or application is specified so any login using any will be able to read information node with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0

POST /permission {
    "targetNodeId": "00000000FCDF978BA9BFAE5D1DEC365B59A249A6B01E3987",
    "policy": {
        "effect": "Allow",
        "actions": ["Read"]
    }
}

Example

In this example, we grant login with Factern Id 00000000301D1F22157CE46BAAB422C13F0F368218027D50 to be able to request Read permission on information node with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0.

POST /permission {
    "targetNodeId": "00000000FCDF978BA9BFAE5D1DEC365B59A249A6B01E3987",
    "policy": {
        "effect": "Allow",
        "granteeId": "00000000301D1F22157CE46BAAB422C13F0F368218027D50",
        "requestInterfaceId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC",
        "actions": ["Read"]
    }
}

Example

In this example, we grant application with Factern Id 00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896 permission to be used with login with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0. This type of permission is necessary to allow this login/application pairing on any API request.

POST /permission {
    "targetNodeId": "000000001ADE8A80023B7E090594227905A5D8DC5C1212A0",
    "policy": {
        "effect": "Allow",
        "applicationId": "00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896",
        "actions": ["Application"]
    }
}

Example

In this example, we grant login with Factern Id 00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896 permission to be represent entity with Factern Id 000000001ADE8A80023B7E090594227905A5D8DC5C1212A0. This type of permission is necessary to allow this login/representing pairing on any API request.

POST /permission {
    "targetNodeId": "000000001ADE8A80023B7E090594227905A5D8DC5C1212A0",
    "policy": {
        "effect": "Allow",
        "granteeId": "00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896",
        "actions": ["Act"]
    }
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreatePermissionRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreatePermissionResponse

read

POST /read

Reading

For reading information data.

The nodeId must be an entity and the template is used to find and return information nodes relative to the entity.

Example

In this example, we read information nodes previously written in the /write examples.


POST /read
{
    "templateId": ":PersonProfile",
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Response


{
  "items": [
    {
      "status": 200,
      "readItem": {
        "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
        "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
        "data": "Bob Watson"
      }
    },
    {
      "status": 200,
      "readItem": {
        "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
        "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
        "children": [
          {
            "status": 200,
            "readItem": {
              "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
              "nodeId": "0000000099A8B1E3605B77F3EDB62B475DE739646041DFB9",
              "data": "Inverness Terrace"
            }
          },
          {
            "status": 200,
            "readItem": {
              "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
              "nodeId": "00000000F76AF7DFD004F6C321636CE9A53F62B05F009BFA",
              "data": "London"
            }
          }
        ]
      }
    }
  ]
}

Example

In this example, we read information nodes with callback interface we created previously. If a callback is specified, then we use the addData endpoint of the callback interface to receive the result of the read.


POST /read
{
    "templateId": ":PersonProfile",
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "callback": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC"
}

Response


{
  "responseId": "000000004AEAD52FCD523113931573071C0B23C33B70E5D9",
  "items": []
}

A request with a callback returns immediately including a unique context id, while the read onto the callback interface occurs asynchronously.

Example

In this example, rather than specifying a templateId, we specify an inline template. We want to read the person's name and city but not street. We also specify another field, 00000000B6BEDDE768D3202057EF824A1923E7FCD26FD74F for a person's house number. In the person's data, however, the house number was not written, so nothing is returned for that field.


POST /read
{
    "template": [
        ":PersonName",
        {
            ":BasicAddress": [
                ":Street",
                ":City"
            ]
        }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Response


{
  "items": [
    {
      "status": 200,
      "readItem": {
        "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
        "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
        "data": "Bob Watson"
      }
    },
    {
      "status": 200,
      "readItem": {
        "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
        "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
        "children": [
          {
            "status": 200,
            "readItem": {
              "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
              "nodeId": "00000000F76AF7DFD004F6C321636CE9A53F62B05F009BFA",
              "data": "London"
            }
          },
          {
            "status": 404,
            "readItem": {
              "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A"
            }
          }
        ]
      }
    }
  ]
}

Example

In the previous example, we saw that a 404 was returned for the house number field since the data had not yet been written. However, if we specify a defaultStorageId when making the request, then an information node will be created and an attempt will be made to fetch the data. It is the responsibility of the interface given by defaultStorageId to determine the data that should be returned.


POST /read
{
    "template": [
        ":PersonName",
        {
            ":BasicAddress": [
                ":Street",
                ":City"
            ]
        }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "defaultStorageId": ":LazyLoadInterface"
}

We could also create a template with a defaultStorageId, in which case all reads will behave like the above request.


POST /createtemplate
{
    ...
    "name": "PersonProfile",
    "defaultStorageId": ":LazyLoadInterface",
    "memberIds": [
        ":PersonName",
        {
            ":BasicAddress": [
                ":Street",
                ":City"
            ]
        }
    ]
}

Example

In this example, we demonstrate the behaviour when fields are not uniqueByParent. In this case, all fields are uniqueByParent except ClientProfile*.


POST /read
{
    "template": [
        {":ClientList": [
            {":ClientProfile": [
                {":BasicAddress": [
                    ":Street"
                ]}
            ]}
        ]}
    ],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Response


{
  "items": [
    {
      "status": 200,
      "readItem": {
        "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
        "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1",
        "children": [
          {
            "readItem": {
              "fieldId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
              "nodes": [
                {
                  "status": 200,
                  "readItem": {
                    "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
                    "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1",
                    "children": [
                      {
                        "status": 200,
                        "readItem": {
                          "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
                          "nodeId": "0000000099A8B1E3605B77F3EDB62B475DE739646041DFB9",
                          "data": "Inverness Terrace"
                        }
                      }
                    ]
                  }
                },
                {
                  "status": 200,
                  "readItem": {
                    "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
                    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
                    "children": [
                      {
                        "status": 200,
                        "readItem": {
                          "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
                          "nodeId": "0000000016270565667CE604DD4DF499C2A31FF6D2072FD7",
                          "data": "Baker Street"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

Data returned for non-uniqueByParent fields is contained under a nodes property within the readItem.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body ReadRequest false none

Responses

Status Meaning Description Schema
200 OK OK ReadResponse

readInformation

POST /readinformation

Read Information

For reading information data.

The nodeId must be an information node.

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body ReadInformationRequest false none

Responses

Status Meaning Description Schema
200 OK OK ReadInformationResponse

replaceInformation

POST /replaceinformation

Replace

Replace is used to change the value of a leaf information node. Note that the new value has a new node id. One can use the /history endpoint to list all historical versions of a leaf information node.

Example

In this example, we create and then replace an information node. The node has field type and parent entity having Factern Ids 0000000016270565667CE604DD4DF499C2A31FF6D2072FD7 and 00000000571749C62247EC65D43151C296366C4EF48658A9, respectively.

POST /createinformation {
    ...
    "parentId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "fieldId": "0000000016270565667CE604DD4DF499C2A31FF6D2072FD7",
    "data": "Alice"
}

The information node's Factern Id is returned.

Response {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

We list the information nodes of the entity filtering results using the field type.

POST /describe {
    ...
    "nodeId": "00000000571749C62247EC65D43151C296366C4EF48658A9",
    "listChildren": {
        "factType": "Information",
        "fieldId": "0000000016270565667CE604DD4DF499C2A31FF6D2072FD7"
    }
}

The response

{
    ...
    "children": [{
        "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
        ...
    }]
}

Now we replace the previously created information node.

POST /replaceinformation {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    "data": "Alison"
}

The replacement information node's Factern Id is returned.

Response {
    ...
    "nodeId": "000000007611AD504DBF600078DF929DD98EAE4787B4D87A",
    ...
}

The same describe as before is invoked, but now shows only the Factern Id of the replacement. Response

{
    ...
    "children": [{
        "nodeId": "000000007611AD504DBF600078DF929DD98EAE4787B4D87A",
        ...
    }]
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body ReplaceFieldRequest false none

Responses

Status Meaning Description Schema
200 OK OK Information

requestPermission

POST /requestpermission

Request Permission

Permissions specified with a requestInterfaceId are called Requestable Permissions. If an agent otherwise matches the permission policy, then the status code returned when reading the target node will be the special status code 477. The /requestpermission endpoint can be used for requesting the permission be granted.

In the case that a node has more than one associated Requestable Permission the most specific matching requestable permission is used. If there is more than one such requestable permission, then the requestable permission used is arbitrary.

Example

In this example we use requestable permissions to get access to the FullName field of the Bob Watson entity having Factern Id 0000000079C27D120B58F74C683639EE72EA2E33B93293CB. The Bob Watson entity and fields were created by the HumanResources login, having Factern Id 00000000F101AB12CC65E5CE2F42E0C9FEC9CBEEEEC03AA3.

We start by attempting to read the FullName field from the Payroll login, having Factern Id 00000000B04BCB6670E3E4F35EDCE6CD8AF77111C74150AE.

POST /read {
    "template": ["frn:field:00000000F101AB12CC65E5CE2F42E0C9FEC9CBEEEEC03AA3:FullName"],
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB"
}

The response is 403, Forbidden, since the Payroll login has no permission on the Bob Watson entity.

Acme wants to make personnel entities available if the reading login is Payroll, but only on a case-by-case basis approved by the Hunam Resources director. They have set up a webservice for receiving permission requests that translates the request to an email to the director. If approved, the requested permission will be created.

We first register the webservice with Factern.

POST /createinterface {
    ...
    "addData": {"url": "https://hr.acme.com/permreq"},
    "getData": {"url": "https://hr.acme.com/get"},
    "deleteData": {"url": "https://hr.acme.com/delete"},
    ...
}

The response contains the created interface's Factern Id

Response
{
    ...
    "nodeId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC",
    ...
}

We now create the requestable permission, indicating that Read requests from the Payroll login will be sent to the approval webservice.

POST /permission {
    "targetNodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
    "policy": {
        "effect": "Allow",
        "grantee": "00000000B04BCB6670E3E4F35EDCE6CD8AF77111C74150AE",
        "requestInterfaceId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC",
        "actions": ["Read"]
    }
}

Now, when the Payroll login attempts a Read, the response is the special Http status code 477, indicating that the permission is requestable.

The Payroll login now requests the permission.

POST /requestpermission {
    "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7"
}

The Human Resources webservice is called with a payload indicating the permission request.

POST https://hr.acme.com/permreq?nodeId=0000000001290F75C24695FA55F40D85843EA40FCB5B49F2 {
    "targetNodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
    "policy": {
        "effect": "Allow",
        "grantee": "00000000B04BCB6670E3E4F35EDCE6CD8AF77111C74150AE",
        "applicationId": "00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896",
        "actions": ["Read"]
    }
}

Assuming the director approves, the Human Resources app is used to create the permission.

POST /permission {
    "targetNodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
    "policy": {
        "effect": "Allow",
        "grantee": "00000000B04BCB6670E3E4F35EDCE6CD8AF77111C74150AE",
        "applicationId": "00000000DAB38B0E3390E09DFF52EF2AED6833F11BBC8896",
        "actions": ["Read"]
    }
}

Now, when the Payroll login can make the requested read. Response

[{
    "status": 200,
    "readItem": {
        "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
        "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7",
        "data": "Bob Watson"
    }
}]

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body NodeIdRequest false none

Responses

Status Meaning Description Schema
200 OK OK StandardNodeResponse

resetLogin

POST /resetlogin

Changing Login Password

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body ResetLoginCredentialsRequest false none

Responses

Status Meaning Description Schema
200 OK OK ResetLoginResponse

searchAlias

POST /searchalias

Search For Alias

For checking if a (globally unique) alias is in use or not.

Example

In this example, we create an an alias, and check to see that the alias exists.

We create the alias.


POST /createalias
{
    "name": "Moriarty"
    ...
}

We now search for the alias.


POST /searchalias
{
    "name": "Moriarty"
}

Response returns true since the alias exists.


{
    "exists": true
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body SearchAliasRequest false none

Responses

Status Meaning Description Schema
200 OK OK SearchAliasResponse

searchEntity

POST /searchentity

Search For Entity

In the case of entities, we do not search for them directly. Rather we search for a value of an information node parented by the entity of a particular field type.

The results can be restricted by specifying the restrictTo property. The value can specify an entity or a group.

restrictTo Fact Type Example Description
Entity frn:entity::rootEntity The found entities must descend from this entity or be this entity
Group frn:group::adminEntities The found entities must be among the entities of this group or descend from one of them

Example

In this example, we create a searchable field type, an information node of that type under an entity, and find that entity We create the searchable type.

POST /createfield {
    "name": "FamilyName"
    "searchable": true,
    ...
}

Response includes the Factern Id of the created field type.

{
    ...
    "nodeId": "000000008029289F643854A1FE32F2EB69DEDFDD54B40EA9",
    ...
}

We create an information node under entity with Factern Id "00000000AF555988FBD9494419C26BBCD299A6314EAC0844".

POST /createinformation {
    ...
    "parentId": "00000000AF555988FBD9494419C26BBCD299A6314EAC0844",
    "fieldId": ":FamilyName",
    "data": "Holmes"
}

The information node's Factern Id is returned.

Response {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

We now search for all entities having information node with value "Holmes".

POST /searchentity {
    ...
    "fieldId": ":FamilyName",
    "operator": "equals",
    "term": "Holmes",
    "maxResults": 1
}

Response includes the matching entity and a token that can used for scrolling through the rest of the results.

{
    "nodes": [{
        "nodeId": "00000000AF555988FBD9494419C26BBCD299A6314EAC0844",
        ...
    }],
    "totalResults": 42,
    "nextToken": "c29tZWJhc2U2NGVuY29kZWRzdHJpbmc="
}

A subsequent request to /searchentity with the token will return the next batch of results.

POST /searchentity {
    "nextToken": "c29tZWJhc2U2NGVuY29kZWRzdHJpbmc="
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body SearchEntityRequest false none

Responses

Status Meaning Description Schema
200 OK OK EntityListResponse

settleAccount

POST /settleaccount

Settle Account

To settle an account we sign a hash of the value and send the signature and value to be resolved on the blockchain. Calls to /settleaccount are exempt from API balance checking, it is possible to use /settleaccount even if the account has hit the hard limit. See Signing for example code to generate the signature.

Example

POST /settleaccount {
    "tokenPayment": {
        "publickey": "0x16e9718e7a55b523df5e30d9fce568b92586ef89",
        "signature": "0xfd9d03cea3afad97900318a25894ce88c25a634f47dd158b3f4fce7c1d39da950e6089c69f32a36392f731727ab3b190c115c462640584e46808dbd13d2420cd1c",
        "value": "42"
    }
}

The settlement node's Factern ID is returned

{
    "settlementId": "0000000057DBB7C63F128D14060866ADAD9D23C20F3E4507"
}

The settlement is processed by the blockchain asynchronously and the resulting transaction ID and result will be returned when describing the settlement node

POST /describe {
    "nodeId": "0000000057DBB7C63F128D14060866ADAD9D23C20F3E4507"
}

When the transaction is complete (usually around 15 seconds) the transaction details and latest nonce will be returned. The possible values returned by settlementStatus are:

settlementStatus Description
CREATED Transaction has been created and is asynchronously being processed.
SUCCESS Transaction completed successfully, the transactionId can be used to confirm the successful transaction.
FAILED Transaction failed, the transactionId can be used to view the failed transaction.

{
    "node": {
        "nodeId": "0000000057DBB7C63F128D14060866ADAD9D23C20F3E4507",
        "factType": "Statement",
        ...
        "settlementStatus": "SUCCESS",
        "settlementTransactionId": "0x5695a0bf217c71dd87f590aadc70bdd16cf16f58e324944722d58c8b045ae891",
        "nonce": "0x00d02acf6ba17e48c95ea0a3e78502ee24f122f1f488f42e34dea967bf2807ce"
    }
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body SettleAccountRequest false none

Responses

Status Meaning Description Schema
200 OK OK SettleAccountResponse

updateApplication

POST /updateapplication

Resetting Application Secret

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body UpdateApplicationRequest false none

Responses

Status Meaning Description Schema
200 OK OK UpdateApplicationResponse

updateinterface

POST /updateinterface

Updating interface endpoints

Updates an interface's endpoints. Does not allowing updating of the interface name.

Example

We create an interface.

POST /createinterface {
    ...
    "addData": {"url": "https://acme.com/add"},
    "getData": {"url": "https://acme.com/get"},
    "deleteData": {"url": "https://acme.com/delete"},
    "name": "BulkStorageInterface"
    ...
}

and then later change the "getData" endpoint to use GET

POST /updateinterface {
    "nodeId": "BulkStorageInterface",
    "getData": {
        "url": "https://acme.com/get",
        "method": "GET"
    }
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body UpdateInterfaceRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateInterfaceResponse

updateStatus

POST /updatestatus

Enabling/Disabling Nodes

Some nodes can be enabled or disabled. Currently, only mirrors support enabling and disabling. This endpoint is used to enable or disable a node after it has been created.

Example

In this example, we create a mirror and then update its status to disabled.

POST /createmirror {
  "sourceNodeId": "00000000A797A4951E939886BA465B9EFABFCD2E5B9131A7",
  "destinationNodeId": "00000000020E67C874812302B5967F0458452B7432F8E89B",
  "templateId": ":SpouseProfile"
}

Response

{
  "nodeId": "00000000D74249B4F013FED3B7438C2E4252EE821E3F2C98",
  ...
  "enabled": true
}

Now disable and describe the mirror.

POST /updatestatus {
  "nodeId": "00000000D74249B4F013FED3B7438C2E4252EE821E3F2C98",
  "status": "DISABLED"
}
POST /describe {
  "nodeId": "00000000D74249B4F013FED3B7438C2E4252EE821E3F2C98"
}

Response

{
  "nodeId": "00000000D74249B4F013FED3B7438C2E4252EE821E3F2C98",
  ...
  "enabled": false
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body UpdateStatusRequest false none

Responses

Status Meaning Description Schema
200 OK OK StandardNodeResponse

watch

POST /watch

Create Watch Trigger

For placing a watch on a node. Once placed, and modification to the node causes a watch event to be created. Examples of modifications that can generate a watch event include replacing an information node, or adding a child.

Watch events are parented by the watch and can be accessed using the /describe endpoint on the watch with a childNodeClass of WatchEvent.

If a filter is specified, a WatchEvent will only be created if the modifications to the watched node match the arguments of the filter.

If an external interface is specified, the corresponding watch events are sent there.

Example

In this example, we place a watch on an entity, having Factern Id "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD", and then add an information node under the entity.

POST /watch {
    "targetNodeId": "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD"
}

Response

{
    ...
    "nodeId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
    ...
}

We add an information node under the entity

POST /createinformation {
    ...
    "parentId": "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD",
    "fieldId": ":FullName",
    "data": "Alice Watson"
}

Response

{
    ...
    "nodeId": "00000000C78EAB913627799CE4EB15227EA0A2FDD2EEF001",
    ...
}

We list the watch events under the watch.

POST /describe {
    ...
    "nodeId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
    "listChildren": {
        "factType": "WatchEvent"
    }
}

The response contains a single watch event that references both the watch and the created information.

{
    ...
    "children": [{
        "parentId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
        "factType": "WatchEvent",
        "nodeId": "00000000AEFFDB5F8A4C745A0E002736D625FC76903888D9",
        "source": "00000000C78EAB913627799CE4EB15227EA0A2FDD2EEF001",
        ...
    }]
}

Example

Watches can use an optional Filter to specify the types of actions that create a watch event. In this example, we place a watch on an entity, having Factern Id "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD", and then add two information nodes under the entity with only one matching the Filter. First we create a filter that evalutes to true for all child nodes that are a 'creates' action. The 'creates' action has a built in FacterId of "0000000000000000D7CE4E3D25DF4F698AFD0545FFDF4136".

POST /createfilter {
  ...
    "statements": "[
      {
        "field": "Action",
        "arguments" : ["0000000000000000D7CE4E3D25DF4F698AFD0545FFDF4136"]
      }
    ]"
    ...
}

Response includes the Factern Id of the created filter.

{
    ...
    "nodeId": "000000000D9955617980254688D7A0F138A94CA8D3ECB0B5",
    ...
}

Then we create a watch with the filter that we just created.

POST /watch {
    "targetNodeId": "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD",
    "filterId": "000000000D9955617980254688D7A0F138A94CA8D3ECB0B5"
}

Response will include the filterId

{
    ...
    "nodeId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
    "filterId": "000000000D9955617980254688D7A0F138A94CA8D3ECB0B5"
    ...
}

Now we create an information node under the watched node and then delete it.

POST /createinformation {
    ...
    "parentId": "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD",
    "fieldId": ":Street",
    "data": "Inverness Terrace"
}

The information node's Factern Id is returned.

Response {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
    ...
}

Now we delete the information node we just created.

POST /deletenode {
    ...
    "nodeId": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB"
}

We list the watch events under the watch.

POST /describe {
    ...
    "nodeId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
    "listChildren": {
        "factType": "WatchEvent"
    }
}

The response contains a single watch event that references only the created information node.

{
    ...
    "children": [{
        "parentId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
        "factType": "WatchEvent",
        "nodeId": "00000000AEFFDB5F8A4C745A0E002736D625FC76903888D9",
        "source": "0000000079C27D120B58F74C683639EE72EA2E33B93293CB",
        ...
    }]
}

Example

The watch in this example includes an outbound call interface. We create an interface for accepting the watch event.

POST /createinterface {
    ...
    "addData": {"url": "https://acme.com/addwatch"},
    "getData": {"url": "https://acme.com/get"},
    "deleteData": {"url": "https://acme.com/delete"},
    ...
}

Response

{
    ...
    "nodeId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC",
    ...
}

And we create a watch on the entity that references the interface.

POST /watch {
    "targetNodeId": "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD",
    "watchInterfaceId": "00000000C4F8891E18CED1C62ACE2ABC2BC0BBF8C6DFBFCC"
}

We add an information node under the entity

POST /createinformation {
    ...
    "parentId": "00000000217DDE302076BFCB4DF075577DFA0C4AABC728DD",
    "fieldId": ":FullName",
    "data": "Alice Moriarty"
}

Response

{
    ...
    "nodeId": "00000000C78EAB913627799CE4EB15227EA0A2FDD2EEF001",
    ...
}

If properly implemented, the interface will receive a POST with payload being the watch event.

POST https://acme.com/addwatch?nodeId=000000009F30B3440E8B768D34552CA45786CDB2AF2959B1 {
    ...
    "parentId": "00000000DD0248D31A8418C62078D7A716EBA9A39F2C3A81",
    "factType": "WatchEvent",
    "nodeId": "00000000AEFFDB5F8A4C745A0E002736D625FC76903888D9",
    "source": "00000000C78EAB913627799CE4EB15227EA0A2FDD2EEF001",
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body CreateWatchRequest false none

Responses

Status Meaning Description Schema
200 OK OK CreateWatchResponse

write

POST /write

Writing by Template

For writing information. The nodeId must be an entity. Data is written using field types as specified in the Template with associated storage ids and values.

Where an information node of the required field type relative to the entity already exists, the result depends on the node field type. If the field is uniqueByParent, then the information node is replaced by the new value. Otherwise, a new information node is created.

Example

In this example, we write information nodes using a template and then update them using the same template. We use the previously created template from the /createtemplate example with id 00000000674AF75DB0F4F1DF9713E09296687718E8157EA3. We write information nodes under some entity with Factern Id 000000004CCE0E488BA795B084CDED1844779A0CB37A87C4 also providing the Factern Id of the template. In this example we store address data in the default store, but use interfaceId 00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5 for storing name data.

POST /write {
    "templateId": ":PersonProfile",
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "values": [
        {
            "data": "Bob Watson",
            "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
        },
        "Inverness Terrace",
        "London"
    ]
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA,
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
                    "nodeId": "0000000099A8B1E3605B77F3EDB62B475DE739646041DFB9"
                },
                {
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "00000000F76AF7DFD004F6C321636CE9A53F62B05F009BFA"
                }]
        }]
}

We now update those values using the same template. Because each of the fields is uniqueByParent, writing the data causes the existing data to be replaced.

POST /write {
    "templateId": ":PersonProfile",
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "values": [
        {
            "data": "Robert Watson",
            "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
        },
        "Gloucester Place",
        "London"
    ]
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A,
            "nodeId": "00000000CD3D53A29F9547FBC1DD3871C5F1B57580C0A4BD"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
                    "nodeId": "00000000C216B111BD06EDC263314D8ED448FC6A2AF97E10"
                },
                {
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "00000000A037E8C23E7681C8B5172464D45CD093BE7AEEB2"
                }]
        }]
}

Example

In this example, rather than specifying a templateId, we specify an inline template. We want to update the person's name and city but not street.

POST /write {
    "template": [
        ":PersonName",
        {
            ":BasicAddress": [
                ":City"
            ]
        }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "values": [
        {
            "data": "Bob Watson",
            "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
        },
        "Exeter"
    ]
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "00000000F832B4AB8E1E2598800572EFFA1B390A75EAF717"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "000000004C61B66FBD267D0150D7D32AD9E1CCBA267845FE"
                }]
        }]
}

Example

In this example, we specify an inline template with a shorter syntax for referring to the city field. The syntax uses a forward slash to reference a nested field.

POST /write {
    "template": [
        ":PersonName",
        ":BasicAddress/:City"
        ],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "values": [
        {
            "data": "Bob Watson",
            "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
        },
        "Exeter"
    ]
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "00000000F832B4AB8E1E2598800572EFFA1B390A75EAF717"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "000000004C61B66FBD267D0150D7D32AD9E1CCBA267845FE"
                }]
        }]
}

Example

In this example, We update the person's profile in a single document, without the need of separate template and values.

POST /write {
    "document": [{
            ":PersonName": {
                    "data": "Bob Watson",
                    "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
                },
            },
            {
                ":BasicAddress": [{
                    ":City": "Plymouth"
                    }]
            }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "00000000EAED228D036D1176CA4FA596D6F360F998009D8A"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "0000000043D9D5305739F86B05E540DECEA24C5B7FDB16FA"
            }]
        }]
}

Example

In this example, we specify an inline document with the shorter syntax for changing the name city.

POST /write {
    "document": [{
            ":PersonName": {
                    "data": "Bob Watson",
                    "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
                },
            },
            {
                ":BasicAddress/:City": "Plymouth"
            }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "00000000EAED228D036D1176CA4FA596D6F360F998009D8A"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "0000000043D9D5305739F86B05E540DECEA24C5B7FDB16FA"
            }]
        }]
}

Example

In this example, we write information nodes using a template and then copy those information nodes under some different entity. We use the previously created template from the /createtemplate example with id 00000000674AF75DB0F4F1DF9713E09296687718E8157EA3. We write information nodes under some entity with Factern Id 000000004CCE0E488BA795B084CDED1844779A0CB37A87C4 also providing the Factern Id of the template.

POST /write {
    "templateId": "00000000674AF75DB0F4F1DF9713E09296687718E8157EA3",
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "values": [
        "Bob Watson",
        "Inverness Terrace",
        "London"
    ]
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "0000000043F912B92911FFE2A52E31066E8B653D3F7E8DE7"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA,
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
                    "nodeId": "0000000099A8B1E3605B77F3EDB62B475DE739646041DFB9"
                },
                {
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "00000000F76AF7DFD004F6C321636CE9A53F62B05F009BFA"
                }]
        }]
}

We now copy those nodes under a different entity 000000006F54C21F6215EBFD46354D87600BD06B9DA61E10, using the original entity 000000004CCE0E488BA795B084CDED1844779A0CB37A87C4 as the copy source.

POST /write {
    "templateId": "00000000674AF75DB0F4F1DF9713E09296687718E8157EA3",
    "nodeId": "000000006F54C21F6215EBFD46354D87600BD06B9DA61E10",
    "sourceNodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "000000009EBDB39BB9D5058733809D468DF4BD12A54E58FE"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA,
            "nodeId": "0000000079CDD8C926AD8A26E5438FF43AAF3D75170DABC1",
            "children": [{
                    "fieldId": "0000000095E0F6B9F5480FD75DA9520E480AD3E89DC35D9A",
                    "nodeId": "00000000B733BFE8C52CE1C0078B15A6CD1D4E78249D80E4"
                },
                {
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "00000000A71188E1FDFF66403839C9B12F36FC8F3A182212"
                }]
        }]
}

Example

In this example, we perform a copy that applies a json transform to the copied value. Create the data to be copied:

POST /write {
  "nodeId": ":sourceEntity"
  "document": [{
          ":PersonData": {
              "data": {
                "full_name": "Bob Watson",
                "streetAddress": "Baker Street"
              }
            }
          }]
}

Perform the copy, specifying a jolt transform. This particular transform will map the streetAddress json field to the field address.street and add a default value of London for address.city.

POST /write {
  "nodeId": ":destinationEntity",
  "sourceNodeId": ":sourceEntity",
  "template": [":PersonData"],
  "transform": [{
    "operation": "shift",
    "spec": {
        "full_name": "full_name",
        "streetAddress": "address.street"
      }
    },
  {
    "operation": "default",
    "spec": {
        "address": {
            "city": "London"
          }
      }
  }]
}

Note that this is a fairly simple transform. To view the full documentation for jolt transforms see (https://github.com/bazaarvoice/jolt). Now we perform a read on the destination entity and see the transformed data.

POST /read {
  "nodeId": ":destinationEntity",
  "template": [":PersonData"]
}

The data would be copied as follows:

{
  "full_name": "Bob Watson",
  "address": {
    "street": "Baker Street",
    "city": "London"
    }
}

Example

In this example, we update the person's profile in a single document. However, we will also specify the optional field defaultStorageId as 00000000FE5B4011E7FF923EA1652C5CEA59C1CEB897BC2B, which will be used as the storageId for any item that does not specify a storageId explicitly. In this case, it would apply to the City field but not the PersonName field. Note that while this example uses a document as input, the defaultStorageId field can be specified for any /write request.

POST /write {
    "document": [{
            ":PersonName": {
                    "data": "Bob Watson",
                    "storageId": "00000000BBA2A97903D1338286F1BBA117D6F48F68A996B5"
                },
            },
            {
                ":BasicAddress": [{
                    ":City": "Plymouth"
                    }]
            }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4",
    "defaultStorageId": "00000000FE5B4011E7FF923EA1652C5CEA59C1CEB897BC2B"
}

Response

{
    "nodes": [{
            "fieldId": "000000008BFE6BB9A2A3F80F23DC6E738470F24B95E5102A",
            "nodeId": "00000000EAED228D036D1176CA4FA596D6F360F998009D8A"
        },
        {
            "fieldId": "00000000AA512DD53AAB152FBFBBB03AEA078368351CBCBA",
            "nodeId": "000000002B3CABC1694B029442124526A5B6137E9EABCAD1v",
            "children": [{
                    "fieldId": "00000000F6EFF0C416BE603531C8BA77C36E8A9B29368FB5",
                    "nodeId": "0000000043D9D5305739F86B05E540DECEA24C5B7FDB16FA"
            }]
        }]
}

Example

In this example, we introduce two new fields: ClientList and ClientProfile, where ClientList is a branch and uniqueByParent, as usual, but ClientProfile is not uniqueByParent.

POST /write {
    "document": [{
        ":ClientList": [
            {":ClientProfile": [
                {":PersonName": "Bob Watson"},
                {":BasicAddress": [
                    {":Street": "Baker Street"}
                ]}
            ]},
            {":ClientProfile": [
                {":PersonName": "Stan Moriarty"},
                {":BasicAddress": [
                    {":Street": "Inverness Terrace"}
                ]}
            ]},
        ]
    }],
    "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Note the use of multiple ClientProfile fields, which is allowed because it is not uniqueByParent.

Example

In this example, we take the previous example, but write the ClientProfile as references instead of direct values. For simplicity, we will assume that Bob Watson is the only client. Create a template that indicates that ClientList will contain references.

POST /createtemplate { ...
  "memberIds": [
    ":ClientList": [
      ":ClientProfile": {
          "reference":true
        }
    ]
  ]
}

Populate the entity.

"nodeId": ":BobWatsonEntity" "document": [
          {":PersonName": "Bob Watson"},
          {":BasicAddress": [
            {":Street": "Baker Street"}
          ]}
        ]
}],

Write using the template, using a reference to BobWatsonEntity in place of the values.

POST /write {
  "document": [{
      ":ClientList": [
        ":ClientProfile": {
            "nodeId":":BobWatsonEntity"
          }
      ]
  }],
  "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Now we can perform a read, with the reference being automatically followed.

POST /read {
  "document": [{
      ":ClientList": [
        ":ClientProfile": [
          {":PersonName": "Bob Watson"},
          {":BasicAddress": [
            {":Street": "Baker Street"}
          ]}
        ]
      ]
  }],
  "nodeId": "000000004CCE0E488BA795B084CDED1844779A0CB37A87C4"
}

Parameters

Parameter In Type Required Description
login query string false none
representing query string false none
body body WriteRequest false none

Responses

Status Meaning Description Schema
200 OK OK WriteResponse

Schemas

Account

{
  "balance": 0
}

Properties

Name Type Required Restrictions Description
balance number true none none

AddLabelRequest

{
  "includeSummary": true,
  "labelId": "string",
  "targetNodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» labelId string true none none
» targetNodeId string true none none

AddLabelResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

AddStatementRequest

{
  "includeSummary": true,
  "actionId": "string",
  "actionQualifierId": "string",
  "targetNodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» actionId string true none none
» actionQualifierId string false none none
» targetNodeId string true none none

AddStatementResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

Agent

{
  "application": "string",
  "login": "string",
  "representing": "string"
}

Properties

Name Type Required Restrictions Description
application string true none none
login string true none none
representing string true none none

Alias

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "local": true,
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» local boolean false none none
» name string true none none

AliasNode

{
  "description": "string",
  "local": true,
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
local boolean false none none
name string true none none

ApiEndpoint

{
  "body": "string",
  "headers": [
    {
      "key": "string",
      "value": "string"
    }
  ],
  "method": "GET",
  "responseTransform": [
    {
      "operation": "shift",
      "spec": {}
    }
  ],
  "type": "Direct",
  "url": "string"
}

Properties

Name Type Required Restrictions Description
body string false none none
headers [HttpHeader] false none none
method string false none none
responseTransform [TransformElement] false none none
type string false none none
url string true none none

Enumerated Values

Property Value
method GET
method POST
method PUT
type Direct
type Indirect

Application

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

ApplicationNode

{}

Properties

None

BaseRequest

{
  "includeSummary": true
}

Properties

Name Type Required Restrictions Description
includeSummary boolean false none none

BaseResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

Name Type Required Restrictions Description
agent Agent false none none
batchId string false none none
factType string false none none
nodeId string false none none
parentId string false none none
summary Summary false none none
timestamp number false none none

Bid

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

BidNode

{}

Properties

None

Cost

{
  "gas": {
    "consumed": 0,
    "price": 0
  },
  "total": 0
}

Properties

Name Type Required Restrictions Description
gas GasCost false none none
total number true none none

CreateAliasRequest

{
  "includeSummary": true,
  "description": "string",
  "local": true,
  "name": "string",
  "targetNodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» local boolean false none none
» name string true none none
» targetNodeId string true none none

CreateAliasResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "local": true,
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» local boolean false none none
» name string true none none

CreateApplicationRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "redirectUris": [
    "string"
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» redirectUris [string] true none none

CreateApplicationResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

CreateBidRequest

{
  "includeSummary": true,
  "priceId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» priceId string true none none

CreateBidResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

CreateChildRequest

{
  "includeSummary": true,
  "parentId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» parentId string false none none

CreateDomainRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "addFact": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "getFact": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "queryFacts": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  }
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» addFact ApiEndpoint true none none
» getFact ApiEndpoint true none none
» queryFacts ApiEndpoint false none none

CreateDomainResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string true none none

CreateEntityRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "domainId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» domainId string false none none

CreateEntityResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string false none none

CreateFieldRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "branch": true,
  "searchable": true,
  "uniqueByParent": true
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» branch boolean false none none
» searchable boolean false none none
» uniqueByParent boolean false none none

CreateFieldResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "name": "string",
  "branch": true,
  "searchable": true,
  "uniqueByParent": true
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous any false none none

allOf

Name Type Required Restrictions Description
» anonymous NamedNode false none none

and

Name Type Required Restrictions Description
» anonymous object false none none
»» branch boolean false none none
»» searchable boolean false none none
»» uniqueByParent boolean false none none

CreateFilterRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "statements": [
    {
      "arguments": [
        "string"
      ],
      "field": "Target"
    }
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» statements [FilterStatement] true none none

CreateFilterResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

CreateGroupRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "memberFactType": "string",
  "memberIds": [
    "string"
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» memberFactType string false none none
» memberIds [string] true none none

CreateGroupResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "memberFactType": "string",
  "memberIds": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0
    }
  ],
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» memberFactType string false none none
» memberIds [Member] true none none
» name string true none none

CreateInformationRequest

{
  "includeSummary": true,
  "parentId": "string",
  "data": "string",
  "fieldId": "string",
  "storageId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateChildRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» data string true none none
» fieldId string true none none
» storageId string false none none

CreateInformationResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "fieldId": "string",
  "storageId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» fieldId string true none none
» storageId string false none none

CreateInterfaceRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "addData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "deleteData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "getData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  }
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» addData ApiEndpoint false none none
» deleteData ApiEndpoint false none none
» getData ApiEndpoint false none none

CreateInterfaceResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "addData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "deleteData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "description": "string",
  "getData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» addData ApiEndpoint false none none
» deleteData ApiEndpoint false none none
» description string false none none
» getData ApiEndpoint false none none
» name string true none none

CreateLabelListRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "members": [
    "string"
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» members [string] true none none

CreateLabelListResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "members": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0,
      "labelListId": "string"
    }
  ],
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» members [LabelListMember] true none none
» name string true none none

CreateLoginRequest

{
  "includeSummary": true,
  "domainId": "string",
  "email": "string",
  "password": "string",
  "redirectUri": "string",
  "workflow": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» domainId string false none none
» email string true none none
» password string false none none
» redirectUri string false none none
» workflow string true none none

CreateLoginResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "dataRootNode": "string",
  "status": "PENDING_CONFIRMATION"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» dataRootNode string true none none
» status string true none none

Enumerated Values

Property Value
status PENDING_CONFIRMATION
status FAILED_TO_SEND_EMAIL

CreateMemberRequest

{
  "includeSummary": true,
  "parentId": "string",
  "memberId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateChildRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» memberId string true none none

CreateMemberResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

CreateMirrorRequest

{
  "includeSummary": true,
  "destinationNodeId": "string",
  "sourceNodeId": "string",
  "templateId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» destinationNodeId string true none none
» sourceNodeId string true none none
» templateId string true none none

CreateMirrorResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "enabled": true
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» enabled boolean true none none

CreateNamedRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateChildRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string false none none

CreatePermissionRequest

{
  "includeSummary": true,
  "policy": {
    "actions": [
      "Read"
    ],
    "applicationId": "string",
    "effect": "Allow",
    "granteeId": "string",
    "requestInterfaceId": "string",
    "scopeId": "string"
  },
  "targetNodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» policy PermissionPolicyDocument true none none
» targetNodeId string true none none

CreatePermissionResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "permissionInterfaceId": "string",
  "policy": {
    "actions": [
      "Read"
    ],
    "applicationId": "string",
    "effect": "Allow",
    "granteeId": "string",
    "requestInterfaceId": "string",
    "scopeId": "string"
  },
  "targetNodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» permissionInterfaceId string false none none
» policy PermissionPolicyDocument false none none
» targetNodeId string false none none

CreatePriceRequest

{
  "includeSummary": true,
  "policy": {
    "actions": [
      "Read"
    ],
    "applicationId": "string",
    "effect": "Allow",
    "granteeId": "string",
    "requestInterfaceId": "string",
    "scopeId": "string"
  },
  "priceDetails": {
    "value": 0
  },
  "targetNodeId": "string",
  "type": "Fixed"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» policy PermissionPolicyDocument true none none
» priceDetails PriceDetails true none none
» targetNodeId string true none none
» type string true none none

Enumerated Values

Property Value
type Fixed

CreatePriceResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

CreateScopeRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "filterIds": [
    "string"
  ],
  "templateIds": [
    "string"
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» filterIds [string] true none none
» templateIds [string] true none none

CreateScopeResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "memberIds": [
    "string"
  ],
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» memberIds [string] true none none
» name string true none none

CreateTemplateRequest

{
  "includeSummary": true,
  "parentId": "string",
  "description": "string",
  "name": "string",
  "defaultStorageId": "string",
  "memberIds": [
    "string"
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous CreateNamedRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» defaultStorageId string false none none
» memberIds [string] true none none

CreateTemplateResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "description": "string",
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string true none none

CreateWatchRequest

{
  "includeSummary": true,
  "filterId": "string",
  "targetNodeId": "string",
  "watchInterfaceId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» filterId string false none none
» targetNodeId string true none none
» watchInterfaceId string false none none

CreateWatchResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

DeleteRequest

{
  "includeSummary": true,
  "nodeId": "string",
  "template": [
    {}
  ],
  "templateId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» nodeId string true none none
» template [object] false none none
» templateId string false none none

DeleteResponse

{
  "items": [
    {
      "deletedItem": {
        "children": [
          null
        ],
        "deletedNodeId": "string",
        "fieldId": "string",
        "nodeId": "string",
        "nodes": [
          null
        ]
      },
      "status": 0
    }
  ],
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
items [DeletedStatusItem] false none none
summary Summary false none none

DeletedItem

{
  "children": [
    {
      "deletedItem": null,
      "status": 0
    }
  ],
  "deletedNodeId": "string",
  "fieldId": "string",
  "nodeId": "string",
  "nodes": [
    null
  ]
}

Properties

Name Type Required Restrictions Description
children [DeletedStatusItem] false none none
deletedNodeId string false none none
fieldId string true none none
nodeId string false none none
nodes [DeletedItem] false none none

DeletedStatusItem

{
  "deletedItem": {
    "children": [
      null
    ],
    "deletedNodeId": "string",
    "fieldId": "string",
    "nodeId": "string",
    "nodes": [
      null
    ]
  },
  "status": 0
}

Properties

Name Type Required Restrictions Description
deletedItem DeletedItem true none none
status integer true none none

DescribeRequest

{
  "includeSummary": true,
  "generateTemplate": true,
  "listChildren": {
    "actionId": "string",
    "factType": "Entity",
    "fieldId": "string",
    "includeDeleted": true,
    "labelListId": "string",
    "labelListName": "string",
    "maxResults": 0,
    "nextToken": "string",
    "startingFromTimestamp": 0,
    "typeName": "string"
  },
  "nodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» generateTemplate boolean false none none
» listChildren ListCriteria false none none
» nodeId string true none none

DescribeResponse

{
  "children": {
    "nextToken": "string",
    "nodes": [
      {
        "agent": {
          "application": "string",
          "login": "string",
          "representing": "string"
        },
        "batchId": "string",
        "deleted": true,
        "factType": "string",
        "nodeId": "string",
        "parentId": "string",
        "timestamp": 0
      }
    ],
    "totalResults": 0
  },
  "memberIds": [
    {}
  ],
  "node": {
    "agent": {
      "application": "string",
      "login": "string",
      "representing": "string"
    },
    "batchId": "string",
    "deleted": true,
    "factType": "string",
    "nodeId": "string",
    "parentId": "string",
    "timestamp": 0
  },
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
children NodeListing false none none
memberIds [object] false none none
node StandardNode true none none
summary Summary false none none

Domain

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string true none none

DomainNode

{
  "description": "string",
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
name string true none none

Entity

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string false none none

EntityListResponse

{
  "nextToken": "string",
  "nodes": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0,
      "description": "string",
      "name": "string"
    }
  ],
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "totalResults": 0
}

Properties

Name Type Required Restrictions Description
nextToken string false none none
nodes [Entity] true none none
summary Summary false none none
totalResults number false none none

EntityNode

{
  "description": "string",
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
name string false none none

ExternalDataUsage

{
  "bytesRead": 0,
  "bytesWritten": 0
}

Properties

Name Type Required Restrictions Description
bytesRead number true none none
bytesWritten number true none none

FactCount

{
  "read": 0,
  "written": 0
}

Properties

Name Type Required Restrictions Description
read number true none none
written number true none none

Field

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "name": "string",
  "branch": true,
  "searchable": true,
  "uniqueByParent": true
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous any false none none

allOf

Name Type Required Restrictions Description
» anonymous NamedNode false none none

and

Name Type Required Restrictions Description
» anonymous object false none none
»» branch boolean false none none
»» searchable boolean false none none
»» uniqueByParent boolean false none none

FieldNode

{
  "description": "string",
  "name": "string",
  "branch": true,
  "searchable": true,
  "uniqueByParent": true
}

Properties

allOf

Name Type Required Restrictions Description
anonymous NamedNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» branch boolean false none none
» searchable boolean false none none
» uniqueByParent boolean false none none

FieldStoreValues

{
  "data": "string",
  "storageId": "string"
}

Properties

Name Type Required Restrictions Description
data string true none none
storageId string false none none

Filter

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

FilterNode

{}

Properties

None

FilterStatement

{
  "arguments": [
    "string"
  ],
  "field": "Target"
}

Properties

Name Type Required Restrictions Description
arguments [string] true none none
field string false none none

Enumerated Values

Property Value
field Target
field Action
field ActionQualifier
field Entity
field Id
field BatchId
field Login
field Application
field OnBehalfOf

GasCost

{
  "consumed": 0,
  "price": 0
}

Properties

Name Type Required Restrictions Description
consumed number true none none
price number true none none

Group

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "memberFactType": "string",
  "memberIds": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0
    }
  ],
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» memberFactType string false none none
» memberIds [Member] true none none
» name string true none none

GroupNode

{
  "description": "string",
  "memberFactType": "string",
  "memberIds": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0
    }
  ],
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
memberFactType string false none none
memberIds [Member] true none none
name string true none none

HttpHeader

{
  "key": "string",
  "value": "string"
}

Properties

Name Type Required Restrictions Description
key string true none none
value string true none none

Information

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "fieldId": "string",
  "storageId": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» fieldId string true none none
» storageId string false none none

InformationListResponse

{
  "nodes": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0,
      "fieldId": "string",
      "storageId": "string"
    }
  ],
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
nodes [Information] true none none
summary Summary false none none

InformationNode

{
  "fieldId": "string",
  "storageId": "string"
}

Properties

Name Type Required Restrictions Description
fieldId string true none none
storageId string false none none

Interface

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "addData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "deleteData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "description": "string",
  "getData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» addData ApiEndpoint false none none
» deleteData ApiEndpoint false none none
» description string false none none
» getData ApiEndpoint false none none
» name string true none none

InterfaceNode

{
  "addData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "deleteData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "description": "string",
  "getData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "name": "string"
}

Properties

Name Type Required Restrictions Description
addData ApiEndpoint false none none
deleteData ApiEndpoint false none none
description string false none none
getData ApiEndpoint false none none
name string true none none

Label

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

LabelList

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "members": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0,
      "labelListId": "string"
    }
  ],
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» members [LabelListMember] true none none
» name string true none none

LabelListMember

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "labelListId": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» labelListId string true none none

LabelListMemberNode

{
  "labelListId": "string"
}

Properties

Name Type Required Restrictions Description
labelListId string true none none

LabelListNode

{
  "description": "string",
  "members": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0,
      "labelListId": "string"
    }
  ],
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
members [LabelListMember] true none none
name string true none none

LabelStatement

{}

Properties

None

ListCriteria

{
  "actionId": "string",
  "factType": "Entity",
  "fieldId": "string",
  "includeDeleted": true,
  "labelListId": "string",
  "labelListName": "string",
  "maxResults": 0,
  "nextToken": "string",
  "startingFromTimestamp": 0,
  "typeName": "string"
}

Properties

Name Type Required Restrictions Description
actionId string false none none
factType string false none none
fieldId string false none none
includeDeleted boolean false none none
labelListId string false none none
labelListName string false none none
maxResults number false none none
nextToken string false none none
startingFromTimestamp number false none none
typeName string false none none

Enumerated Values

Property Value
factType Entity
factType Login
factType Application
factType Field
factType Information
factType Permission
factType Watch
factType WatchEvent
factType Group
factType Interface
factType LabelList
factType Label
factType Template
factType Scope

Login

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

LoginNode

{}

Properties

None

Member

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

MemberNode

{}

Properties

None

Mirror

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "enabled": true
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» enabled boolean true none none

MirrorNode

{
  "enabled": true
}

Properties

Name Type Required Restrictions Description
enabled boolean true none none

NamedNode

{
  "description": "string",
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
name string true none none

NodeIdRequest

{
  "includeSummary": true,
  "nodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» nodeId string true none none

NodeListing

{
  "nextToken": "string",
  "nodes": [
    {
      "agent": {
        "application": "string",
        "login": "string",
        "representing": "string"
      },
      "batchId": "string",
      "deleted": true,
      "factType": "string",
      "nodeId": "string",
      "parentId": "string",
      "timestamp": 0
    }
  ],
  "totalResults": 0
}

Properties

Name Type Required Restrictions Description
nextToken string false none none
nodes [StandardNode] false none none
totalResults number false none none

Permission

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "permissionInterfaceId": "string",
  "policy": {
    "actions": [
      "Read"
    ],
    "applicationId": "string",
    "effect": "Allow",
    "granteeId": "string",
    "requestInterfaceId": "string",
    "scopeId": "string"
  },
  "targetNodeId": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» permissionInterfaceId string false none none
» policy PermissionPolicyDocument false none none
» targetNodeId string false none none

PermissionAction

"Read"

Properties

Name Type Required Restrictions Description
anonymous string false none none

Enumerated Values

Property Value
anonymous Read
anonymous Act
anonymous Application
anonymous Create
anonymous Describe

PermissionEffect

"Allow"

Properties

Name Type Required Restrictions Description
anonymous string false none none

Enumerated Values

Property Value
anonymous Allow
anonymous Deny

PermissionNode

{
  "permissionInterfaceId": "string",
  "policy": {
    "actions": [
      "Read"
    ],
    "applicationId": "string",
    "effect": "Allow",
    "granteeId": "string",
    "requestInterfaceId": "string",
    "scopeId": "string"
  },
  "targetNodeId": "string"
}

Properties

Name Type Required Restrictions Description
permissionInterfaceId string false none none
policy PermissionPolicyDocument false none none
targetNodeId string false none none

PermissionPolicyDocument

{
  "actions": [
    "Read"
  ],
  "applicationId": "string",
  "effect": "Allow",
  "granteeId": "string",
  "requestInterfaceId": "string",
  "scopeId": "string"
}

Properties

Name Type Required Restrictions Description
actions [PermissionAction] true none none
applicationId string false none none
effect PermissionEffect false none none
granteeId string false none none
requestInterfaceId string false none none
scopeId string false none none

Price

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

PriceDetails

{
  "value": 0
}

Properties

Name Type Required Restrictions Description
value number false none none

PriceNode

{}

Properties

None

ReadInformationRequest

{
  "includeSummary": true,
  "nodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» nodeId string true none none

ReadInformationResponse

{
  "data": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
data string false none none
summary Summary false none none

ReadItem

{
  "children": [
    {
      "readItem": null,
      "status": 0
    }
  ],
  "data": "string",
  "fieldId": "string",
  "nodeId": "string"
}

Properties

Name Type Required Restrictions Description
children [ReadStatusItem] false none none
data string false none none
fieldId string true none none
nodeId string false none none

ReadRequest

{
  "includeSummary": true,
  "callback": "string",
  "defaultStorageId": "string",
  "nodeId": "string",
  "template": [
    {}
  ],
  "templateId": "string",
  "transform": [
    {
      "operation": "shift",
      "spec": {}
    }
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» callback string false none none
» defaultStorageId string false none none
» nodeId string true none none
» template [object] false none none
» templateId string false none none
» transform [TransformElement] false none none

ReadResponse

{
  "items": [
    {
      "readItem": {
        "children": [
          null
        ],
        "data": "string",
        "fieldId": "string",
        "nodeId": "string"
      },
      "status": 0
    }
  ],
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
items [ReadStatusItem] false none none
summary Summary false none none

ReadStatusItem

{
  "readItem": {
    "children": [
      null
    ],
    "data": "string",
    "fieldId": "string",
    "nodeId": "string"
  },
  "status": 0
}

Properties

Name Type Required Restrictions Description
readItem ReadItem true none none
status integer true none none

ReplaceFieldRequest

{
  "includeSummary": true,
  "data": "string",
  "nodeId": "string",
  "storageInterfaceId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» data string true none none
» nodeId string true none none
» storageInterfaceId string false none none

ResetLoginCredentialsRequest

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0,
  "newPassword": "string",
  "oldPassword": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» newPassword string true none none
» nodeId string true none none
» oldPassword string true none none

ResetLoginResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

Scope

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "memberIds": [
    "string"
  ],
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» memberIds [string] true none none
» name string true none none

ScopeNode

{
  "description": "string",
  "memberIds": [
    "string"
  ],
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
memberIds [string] true none none
name string true none none

SearchAliasRequest

{
  "includeSummary": true,
  "name": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» name string true none none

SearchAliasResponse

{
  "exists": true,
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
exists boolean true none none
summary Summary false none none

SearchEntityRequest

{
  "includeSummary": true,
  "fieldId": "string",
  "maxResults": 0,
  "nextToken": "string",
  "operator": "equals",
  "query": {},
  "restrictTo": "string",
  "term": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» fieldId string false none none
» maxResults number false none none
» nextToken string false none none
» operator string false none none
» query object false none none
» restrictTo string false none none
» term string false none none

Enumerated Values

Property Value
operator equals
operator startsWith
operator contains
operator elasticsearch

Searches

{
  "hits": 0,
  "reindexedNodes": 0,
  "reindexingCalls": 0,
  "searches": 0
}

Properties

Name Type Required Restrictions Description
hits number true none none
reindexedNodes number true none none
reindexingCalls number true none none
searches number true none none

SettleAccountRequest

{
  "includeSummary": true,
  "tokenPayment": {
    "publickey": "string",
    "signature": "string",
    "value": "string"
  }
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» tokenPayment TokenPayment true none none

SettleAccountResponse

{
  "settlementId": "string"
}

Properties

Name Type Required Restrictions Description
settlementId string true none none

StandardNode

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

Name Type Required Restrictions Description
agent Agent true none none
batchId string true none none
deleted boolean false none none
factType string true none none
nodeId string true none none
parentId string true none none
timestamp number true none none

StandardNodeResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

Name Type Required Restrictions Description
agent Agent true none none
batchId string true none none
deleted boolean false none none
factType string true none none
nodeId string true none none
parentId string true none none
summary Summary false none none
timestamp number true none none

Statement

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

StatementStatement

{}

Properties

None

Summary

{
  "account": {
    "balance": 0
  },
  "cost": {
    "gas": {
      "consumed": 0,
      "price": 0
    },
    "total": 0
  },
  "externalDataUsage": {
    "bytesRead": 0,
    "bytesWritten": 0
  },
  "facts": {
    "read": 0,
    "written": 0
  },
  "searches": {
    "hits": 0,
    "reindexedNodes": 0,
    "reindexingCalls": 0,
    "searches": 0
  }
}

Properties

Name Type Required Restrictions Description
account Account false none none
cost Cost false none none
externalDataUsage ExternalDataUsage false none none
facts FactCount false none none
searches Searches false none none

Template

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "description": "string",
  "name": "string"
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» description string false none none
» name string true none none

TemplateNode

{
  "description": "string",
  "name": "string"
}

Properties

Name Type Required Restrictions Description
description string false none none
name string true none none

TokenPayment

{
  "publickey": "string",
  "signature": "string",
  "value": "string"
}

Properties

Name Type Required Restrictions Description
publickey string true none none
signature string true none none
value string true none none

TransformElement

{
  "operation": "shift",
  "spec": {}
}

Properties

Name Type Required Restrictions Description
operation string false none none
spec object false none none

Enumerated Values

Property Value
operation shift
operation default
operation remove
operation sort
operation cardinality

UpdateApplicationRequest

{
  "includeSummary": true,
  "nodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» nodeId string true none none

UpdateApplicationResponse

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  },
  "timestamp": 0
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none

UpdateInterfaceRequest

{
  "includeSummary": true,
  "addData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "deleteData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "getData": {
    "body": "string",
    "headers": [
      {
        "key": "string",
        "value": "string"
      }
    ],
    "method": "GET",
    "responseTransform": [
      {
        "operation": "shift",
        "spec": {}
      }
    ],
    "type": "Direct",
    "url": "string"
  },
  "nodeId": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» addData ApiEndpoint false none none
» deleteData ApiEndpoint false none none
» getData ApiEndpoint false none none
» nodeId string true none none

UpdateStatusRequest

{
  "includeSummary": true,
  "nodeId": "string",
  "status": "enabled"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous NodeIdRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» status string true none none

Enumerated Values

Property Value
status enabled
status disabled

Watch

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none

WatchEvent

{
  "agent": {
    "application": "string",
    "login": "string",
    "representing": "string"
  },
  "batchId": "string",
  "deleted": true,
  "factType": "string",
  "nodeId": "string",
  "parentId": "string",
  "timestamp": 0,
  "source": {
    "agent": {
      "application": "string",
      "login": "string",
      "representing": "string"
    },
    "batchId": "string",
    "deleted": true,
    "factType": "string",
    "nodeId": "string",
    "parentId": "string",
    "timestamp": 0
  }
}

Properties

allOf - discriminator: StandardNode.factType

Name Type Required Restrictions Description
anonymous StandardNode false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» source StandardNode true none none

WatchEventNode

{
  "source": {
    "agent": {
      "application": "string",
      "login": "string",
      "representing": "string"
    },
    "batchId": "string",
    "deleted": true,
    "factType": "string",
    "nodeId": "string",
    "parentId": "string",
    "timestamp": 0
  }
}

Properties

Name Type Required Restrictions Description
source StandardNode true none none

WatchNode

{}

Properties

None

WriteItem

{
  "children": [
    null
  ],
  "fieldId": "string",
  "nodeId": "string"
}

Properties

Name Type Required Restrictions Description
children [WriteItem] false none none
fieldId string true none none
nodeId string true none none

WriteRequest

{
  "includeSummary": true,
  "defaultStorageId": "string",
  "document": [
    {}
  ],
  "nodeId": "string",
  "sourceNodeId": "string",
  "template": [
    {}
  ],
  "templateId": "string",
  "transform": [
    {
      "operation": "shift",
      "spec": {}
    }
  ],
  "values": [
    {}
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BaseRequest false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» defaultStorageId string false none none
» document [object] false none none
» nodeId string true none none
» sourceNodeId string false none none
» template [object] false none none
» templateId string false none none
» transform [TransformElement] false none none
» values [object] false none none

WriteResponse

{
  "nodes": [
    {
      "children": [
        null
      ],
      "fieldId": "string",
      "nodeId": "string"
    }
  ],
  "summary": {
    "account": {
      "balance": 0
    },
    "cost": {
      "gas": {
        "consumed": 0,
        "price": 0
      },
      "total": 0
    },
    "externalDataUsage": {
      "bytesRead": 0,
      "bytesWritten": 0
    },
    "facts": {
      "read": 0,
      "written": 0
    },
    "searches": {
      "hits": 0,
      "reindexedNodes": 0,
      "reindexingCalls": 0,
      "searches": 0
    }
  }
}

Properties

Name Type Required Restrictions Description
nodes [WriteItem] true none none
summary Summary false none none