Audit v0.3.0
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
The Audit API provides read-only access to Apiture system audit records, which track user online banking activity. This API is available to administrators only, not bank customers. Only activity processed by Apiture APIs and services is available through this API.
This API manages two primary resources: audit records of user or other activity, and audit record types which are metadata that describe the data in the audit records.
Each audit record contains the type of the record, the user who
performed the activity, the URI of related resources, a time stamp,
and a data object containing type-specific properties of the activity;
see the record schema below.
Administrator users of this API can filter audit records using most of these values.
The content of each audit record is defined with an audit record type which
describes the content of all audit records of that type.
The audit record type contains its name, label, description and a JSON schema object which defines
the data types and descriptions of the data property of an audit record.
See the recordType schema below.
There is a many-to-one relationship between audit records and audit record types.
Audit record queries
The getAuditRecords operation supports querying by the fields
common to all audit records:
?type=, ?category=, ?user=, ?host=, ?uri=,
(To filter by date/time, see Time-bound queries below.)
Audit records by user
Each audit record contains the customerId of the user who performed
the auditable action, if it is known.
The customerId is the unique customerId of the user's resource from the
Users service. This indicates who performed the audited activity.
In some cases, administrators at the financial institution can perform
some actions on behalf of users from an administrative application.
If this occurs, the audit record's customerId will be the ID of
the administrator, and the onBehalfOf value will be the
customer ID of the financial institution customer. The ?user={customerId}
query parameter on getAuditRecords matches either the customerId
property or the onBehalfOf property.
The customer ID is not always known. For example, if an administrator
reverses a transaction in the core servicing application and that
reversal flows into Apiture resources, Apiture may not be able
to attribute the activity to a user, but will still create an audit
record for the activity. The customerId has the value <system> for
audit records for such operations. Please consult the audit
records in the banking core or servicing application to track such
activity.
Time-bound queries
The audit record views also support time-bounded queries. By default, the
getAuditRecords and getAuditRecordsByType operations return
records for the current day (based on the date component of the record's occurredAt field),
in reverse chronological order.
These date-time bounds can be passed explicitly to override the defaults:
- Pass the startAtandendAtto find any records which overlap that date range. For example, to fetch for the first six days of September 2019, request?startAt=2019-09-01&period=P6D.
- Pass the startAtto find audit records beginning at that date or date-time. The optionalperioddetermines how many minutes, hours, or days of data to include in the paginated response.
- Pass the endAtto return audit records which occurred up to specified date or date time. The optionalperioddetermines how many minutes, hours, or days of data to include in the paginated response. For example, to fetch for the last six days of September 2019, request?startAt=2019-09-30&period=P6D.
The default period is P1D.
To fetch records for the last six days, request just ?period=P6D;
use ?period=PT1H to select just the past one hour of data.
This result list of records is sorted in reverse chronological order
unless startAt is specified.
(The default endAt is the current instant.)
period is not allowed if both startAt and endAt are passed.
To find transfers scheduled in September 2019,
specify a startAt of September 1 and a period of P1M (one month):
GET /audit/recordsByType?type=transferScheduled&startAt=2019-09-01&period=P1M
startAt and endAt may be either specific date or date-time values in
RFC 3339 format
(YYYY-MM-DD or YYYY-MM-DDThh:mm:ss.sssZ).
Caution: The occurredAt time is in UTC time zone;
adjust start and end times to account for local time zones.
Download OpenAPI Definition (YAML)
Base URLs:
Authentication
- API Key (apiKey)- header parameter: API-Key
- API Key based authentication. Each client application must pass its private, unique API key, allocated in the developer portal, via the API-Key: {api-key}request header.
 
- OAuth2 authentication  (accessToken)- OAuth2 client access token authentication. The client authenticates against the server at authorizationUrl, passing the client's privateclientId(and optionalclientSecret) as part of this flow. The client obtains an access token from the server attokenUrl. It then passes the received access token via theAuthorization: Bearer {access-token}header in subsequent API calls. The authorization process also returns a refresh token which the client should use to renew the access token before it expires.
- Flow: authorizationCode
- Authorization URL = https://auth.apiture.com/oauth2/authorize
- Token URL = http://auth.apiture.com/auth/oauth2/token
 
- OAuth2 client access token authentication. The client authenticates against the server at 
| Scope | Scope Description | 
|---|---|
| admin/read | Read access to audit records | 
Audit Record
Audit Record
getAuditRecords
Code samples
# You can also use wget
curl -X GET /audit/records \
  -H 'Accept: application/hal+json' \
  -H 'API-Key: API_KEY' \
  -H 'Authorization: Bearer {access-token}'
GET /audit/records HTTP/1.1
Accept: application/hal+json
var headers = {
  'Accept':'application/hal+json',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
$.ajax({
  url: '/audit/records',
  method: 'get',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/hal+json',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
fetch('/audit/records',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'
headers = {
  'Accept' => 'application/hal+json',
  'API-Key' => 'API_KEY',
  'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get '/audit/records',
  params: {
  }, headers: headers
p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/hal+json',
  'API-Key': 'API_KEY',
  'Authorization': 'Bearer {access-token}'
}
r = requests.get('/audit/records', params={
}, headers = headers)
print r.json()
URL obj = new URL("/audit/records");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
       "bytes"
       "net/http"
)
func main() {
    headers := map[string][]string{
        "Accept": []string{"application/hal+json"},
        "API-Key": []string{"API_KEY"},
        "Authorization": []string{"Bearer {access-token}"},
        
    }
    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/audit/records", data)
    req.Header = headers
    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
Return audit records
GET /records
Return a paginated sortable collection of audit records which satisfy the filtering query parameters. By default, this returns records for the past 24 hours, in reverse chronological order. This result list of records is sorted in reverse chronological order unless ?startAt= is specified. The links in the response include pagination links.
Parameters
| Parameter | Description | 
|---|---|
| type(query) | stringRestrict audit records to those matching this record type. Multiple types may be specified, separated by |. | 
| category(query) | stringRestrict audit records to those matching this record type category. Multiple categories may be specified, separated by |. | 
| user(query) | stringRestrict audit records to those where either the customerIdoronBehalfOffields match this value. | 
| host(query) | stringRestrict audit records to those matching this client host IP address. | 
| startAt(query) | string(date)The start date or date-time of the time-bounded query. May be combined with endAtorperiodbut not both. This may be either a date or date-time in RFC 3339 UTC format (YYYY-MM-DDorYYYY-MM-DDThh:mm:ss.sssZ). If only a date is passed, the time of day is00:00:00. The defaultstartAtdate-time is 24 hours before the current instant. UsingstartAtwill change the sort order from reverse to forward chronological order. | 
| endAt(query) | string(date)The end date of the time-bounded query. May be combined with startAtorperiodbut not both. This may be either a date or date-time in RFC 3339 UTC format (YYYY-MM-DDorYYYY-MM-DDThh:mm:ss.sssZ). If only a date is passed, the time of day is24:00:00. The defaultendAtis the current instant. | 
| period(query) | string(period)The time period for the date-time range, looking backwards from endAt(or today, ifendAtis omitted), or forward fromstartAt. Theperiodis a ISO 8601 duration. For example, to list audit records for the last 6 days, use?period=P6D. The default isP1Dindicating one day of data. Examples ofperiodvalues:P1M(one month),P2W(two weeks),P5D(five days),PT12H(twelve hours),PT30M(30 minutes) andPT30S(30 seconds). | 
| uri(query) | string(uri)Restrict audit records to where primaryUriorsecondaryUrimatch this URI parameter value. This string is a relative URI only, without the absolutehttps://hostURL prefix. Example:?uri=/accounts/account/b6512168-20fc-4a8c-80dd-8670f76ea356 | 
| start(query) | integer(int64)The zero-based index of the first audit record item to include in this page. The default 0 denotes the beginning of the collection. | 
| limit(query) | integer(int32)The maximum number of audit record representations to return in this page. | 
| sortBy(query) | stringOptional sort criteria. See sort criteria format, such as ?sortBy=field1,-field2. | 
Example responses
200 Response
{
  "_profile": "https://api.apiture.com/schemas/audit/records/v1.0.0/profile.json",
  "start": 0,
  "limit": 1000,
  "count": 1000,
  "name": "records",
  "_links": {
    "self": {
      "href": "/audit/records?category=transfers"
    },
    "next": {
      "href": "/audit/records?category=transfers&start=1000&limit=1000"
    },
    "collection": {
      "href": "/audit/records"
    }
  },
  "_embedded": {
    "items": [
      {
        "_id": "0399abed-fd3d-4830-a88b-30f38b8a365c",
        "_profile": "https://api.apiture.com/schemas/audit/record/v1.0.0/profile.json",
        "type": "transferScheduled",
        "occurredAt": {},
        "username": "lucy.wellphunded@bankcustomer.example.com",
        "host": "13.226.38.34",
        "primaryUri": "/transfers/scheduledTransfer/a727ff2a-08ea-42ce-b8dc-edea60646819",
        "data": {
          "sourceAccount": "9876543210",
          "sourceRoutingNumber": "021000021",
          "targetAccount": "9876543219",
          "targetRoutingNumber": "021000021",
          "amount": "1500.00",
          "currency": "USD",
          "start": {}
        },
        "links": {
          "self": {
            "href": "/audit/records/0399abed-fd3d-4830-a88b-30f38b8a365c"
          },
          "apiture:type": {
            "href": "/audit/types/transferScheduled"
          }
        }
      }
    ]
  }
}
Responses
| Status | Description | 
|---|---|
| 200 | OK | 
| OK | |
| Schema: records | |
| 400 | Bad Request | 
| Bad Request.  The request body or one or more of the query parameters was not well formed.  The _errorfield in the response will contain details about the request error. | |
| Schema: errorResponse | |
| 422 | Unprocessable Entity | 
| Unprocessable Entity. One or more of the query parameters was well formed but otherwise invalid. The _errorfield in the response will contain details about the request error. | |
| Schema: errorResponse | 
getAuditRecord
Code samples
# You can also use wget
curl -X GET /audit/records/{recordId} \
  -H 'Accept: application/hal+json' \
  -H 'If-None-Match: string' \
  -H 'API-Key: API_KEY' \
  -H 'Authorization: Bearer {access-token}'
GET /audit/records/{recordId} HTTP/1.1
Accept: application/hal+json
If-None-Match: string
var headers = {
  'Accept':'application/hal+json',
  'If-None-Match':'string',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
$.ajax({
  url: '/audit/records/{recordId}',
  method: 'get',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/hal+json',
  'If-None-Match':'string',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
fetch('/audit/records/{recordId}',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'
headers = {
  'Accept' => 'application/hal+json',
  'If-None-Match' => 'string',
  'API-Key' => 'API_KEY',
  'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get '/audit/records/{recordId}',
  params: {
  }, headers: headers
p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/hal+json',
  'If-None-Match': 'string',
  'API-Key': 'API_KEY',
  'Authorization': 'Bearer {access-token}'
}
r = requests.get('/audit/records/{recordId}', params={
}, headers = headers)
print r.json()
URL obj = new URL("/audit/records/{recordId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
       "bytes"
       "net/http"
)
func main() {
    headers := map[string][]string{
        "Accept": []string{"application/hal+json"},
        "If-None-Match": []string{"string"},
        "API-Key": []string{"API_KEY"},
        "Authorization": []string{"Bearer {access-token}"},
        
    }
    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/audit/records/{recordId}", data)
    req.Header = headers
    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
Fetch a representation of this audit record
GET /records/{recordId}
Return a HAL representation of this audit record resource.
Parameters
| Parameter | Description | 
|---|---|
| recordId(path) | string(required)The unique identifier of this audit record. This is an opaque string. | 
| If-None-Match(header) | stringThe entity tag that was returned in the ETagresponse. If the resource's current entity tag matches, theGETwill return 304 (Not Modified) and no response body, else the resource representation will be returned. | 
Example responses
200 Response
{
  "_id": "0399abed-fd3d-4830-a88b-30f38b8a365c",
  "_profile": "https://api.apiture.com/schemas/audit/record/v1.0.0/profile.json",
  "type": "transferScheduled",
  "occurredAt": {},
  "customerId": "32bc88e4003d061f4fdb",
  "username": "lucy.wellphunded@bankcustomer.example.com",
  "host": "13.226.38.34",
  "primaryUri": "/transfers/scheduledTransfer/a727ff2a-08ea-42ce-b8dc-edea60646819",
  "data": {
    "sourceAccount": "9876543210",
    "sourceRoutingNumber": "021000021",
    "targetAccount": "9876543219",
    "targetRoutingNumber": "021000021",
    "amount": "1500.00",
    "currency": "USD",
    "start": {}
  },
  "links": {
    "self": {
      "href": "/audit/records/0399abed-fd3d-4830-a88b-30f38b8a365c"
    },
    "apiture:type": {
      "href": "/audit/types/transferScheduled"
    }
  }
}
Responses
| Status | Description | 
|---|---|
| 200 | OK | 
| OK | |
| Schema: record | |
| 304 | Not Modified | 
| Not Modified. The resource has not been modified since it was last fetched. | |
| 404 | Not Found | 
| Not Found. There is no such audit record resource at the specified {recordId}. The_errorfield in the response will contain details about the request error. | |
| Schema: errorResponse | 
Response Headers
| Status | Description | 
|---|---|
| 200 | ETagstring | 
| The ETagresponse header specifies an entity tag which must be provided in anIf-Matchrequest header forPUTorPATCHoperations which update this audit record resource. | 
Audit Record Type
Audit Record Types
getAuditRecordTypes
Code samples
# You can also use wget
curl -X GET /audit/types \
  -H 'Accept: application/hal+json' \
  -H 'API-Key: API_KEY' \
  -H 'Authorization: Bearer {access-token}'
GET /audit/types HTTP/1.1
Accept: application/hal+json
var headers = {
  'Accept':'application/hal+json',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
$.ajax({
  url: '/audit/types',
  method: 'get',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/hal+json',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
fetch('/audit/types',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'
headers = {
  'Accept' => 'application/hal+json',
  'API-Key' => 'API_KEY',
  'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get '/audit/types',
  params: {
  }, headers: headers
p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/hal+json',
  'API-Key': 'API_KEY',
  'Authorization': 'Bearer {access-token}'
}
r = requests.get('/audit/types', params={
}, headers = headers)
print r.json()
URL obj = new URL("/audit/types");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
       "bytes"
       "net/http"
)
func main() {
    headers := map[string][]string{
        "Accept": []string{"application/hal+json"},
        "API-Key": []string{"API_KEY"},
        "Authorization": []string{"Bearer {access-token}"},
        
    }
    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/audit/types", data)
    req.Header = headers
    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
Return a collection of audit record types
GET /types
Return a collection of audit record types.
Example responses
200 Response
{
  "_profile": "https://api.apiture.com/schemas/audit/recordTypes/v1.0.0/profile.json",
  "start": 0,
  "count": 67,
  "name": "recordTypes",
  "_links": {
    "self": {
      "href": "/audit/recordTypes?start=10&limit=10"
    },
    "collection": {
      "href": "/audit/recordTypes"
    }
  },
  "_embedded": {
    "items": [
      {
        "name": "transferScheduled",
        "_profile": "https://api.apiture.com/schemas/audit/recordType/v1.0.0/profile.json",
        "label": "Transfer Scheduled",
        "category": "transfers",
        "categoryLabel": "Transfers",
        "version": "1.0.0",
        "description": "The user scheduled a one-time or recurring transfer.",
        "_links": {
          "self": {
            "href": "/audit/recordTypes/transferScheduled"
          }
        },
        "schema": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "id": "https://api.apiture.com/schemas/audit/transferScheduled/v1.0.0/schema.json",
          "x-apiture-name": "transferScheduled",
          "x-apiture-category": "transfers",
          "x-apiture-categoryLabel": "Transfers",
          "x-apiture-primaryUri": "The transfer resource",
          "x-apiture-secondaryUri": "The source account",
          "type": "object",
          "title": "Transfer Scheduled",
          "description": "The user scheduled a one-time or recurring transfer.",
          "required": [
            "sourceAccountNumber",
            "sourceRoutingNumber",
            "targetAccountNumber",
            "targetRoutingNumber",
            "amount",
            "currency",
            "start"
          ],
          "properties": {
            "sourceAccountNumber": {
              "description": "The account number where funds are withdrawn.",
              "type": "string"
            },
            "sourceRoutingNumber": {
              "description": "The routing number of the financial institution where funds are withdrawn.",
              "type": "string"
            },
            "targetAccountNumber": {
              "description": "The account number where funds are deposited.",
              "type": "string"
            },
            "targetRoutingNumber": {
              "description": "The routing number of the financial institution where funds are deposited.",
              "type": "string"
            },
            "amount": {
              "description": "The amount that was scheduled to transfer.",
              "type": "string"
            },
            "currency": {
              "description": "The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this monetary value. This is always upper case ASCII. ",
              "type": "string",
              "minLength": 3,
              "maxLength": 3
            },
            "start": {
              "description": "When the transfer occurs, or when a recurring transfer begins. \n",
              "type": "string",
              "example": "2018-06-10"
            },
            "every": {
              "description": "For recurring transfers, how often the tranfser recurs.",
              "type": "string",
              "example": "P1M"
            },
            "count": {
              "description": "For a recurring transfer, this is the number of transfers which have been processed. It is a derived value and ignored on updates.",
              "type": "integer",
              "example": 5
            },
            "first": {
              "description": "If `true`, future transfers in the series should be executed on the _first_  processing day of the month.",
              "type": "boolean",
              "example": true
            },
            "last": {
              "description": "If `true`, future transfers in the series should be executed on the _last_  processing day of the month.",
              "type": "boolean",
              "example": false
            },
            "maximumCount": {
              "description": "The maximum number of transfers to perform for a recurring transfer.",
              "type": "integer",
              "example": 10
            },
            "end": {
              "description": "Do not schedule transfers beyond this date.",
              "type": "string",
              "example": "2018-08-01"
            }
          }
        }
      }
    ]
  }
}
Responses
| Status | Description | 
|---|---|
| 200 | OK | 
| OK | |
| Schema: recordTypes | 
getAuditRecordType
Code samples
# You can also use wget
curl -X GET /audit/types/{recordTypeId} \
  -H 'Accept: application/hal+json' \
  -H 'If-None-Match: string' \
  -H 'API-Key: API_KEY' \
  -H 'Authorization: Bearer {access-token}'
GET /audit/types/{recordTypeId} HTTP/1.1
Accept: application/hal+json
If-None-Match: string
var headers = {
  'Accept':'application/hal+json',
  'If-None-Match':'string',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
$.ajax({
  url: '/audit/types/{recordTypeId}',
  method: 'get',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/hal+json',
  'If-None-Match':'string',
  'API-Key':'API_KEY',
  'Authorization':'Bearer {access-token}'
};
fetch('/audit/types/{recordTypeId}',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'
headers = {
  'Accept' => 'application/hal+json',
  'If-None-Match' => 'string',
  'API-Key' => 'API_KEY',
  'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get '/audit/types/{recordTypeId}',
  params: {
  }, headers: headers
p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/hal+json',
  'If-None-Match': 'string',
  'API-Key': 'API_KEY',
  'Authorization': 'Bearer {access-token}'
}
r = requests.get('/audit/types/{recordTypeId}', params={
}, headers = headers)
print r.json()
URL obj = new URL("/audit/types/{recordTypeId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
       "bytes"
       "net/http"
)
func main() {
    headers := map[string][]string{
        "Accept": []string{"application/hal+json"},
        "If-None-Match": []string{"string"},
        "API-Key": []string{"API_KEY"},
        "Authorization": []string{"Bearer {access-token}"},
        
    }
    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/audit/types/{recordTypeId}", data)
    req.Header = headers
    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
Fetch a representation of this audit record type
GET /types/{recordTypeId}
Return a HAL representation of this audit record type resource.
Parameters
| Parameter | Description | 
|---|---|
| recordTypeId(path) | string(required)The unique identifier of this audit record type. This is an opaque string. | 
| If-None-Match(header) | stringThe entity tag that was returned in the ETagresponse. If the resource's current entity tag matches, theGETwill return 304 (Not Modified) and no response body, else the resource representation will be returned. | 
Example responses
200 Response
{
  "name": "transferScheduled",
  "_profile": "https://api.apiture.com/schemas/audit/recordType/v1.0.0/profile.json",
  "label": "Transfer Scheduled",
  "category": "transfers",
  "categoryLabel": "Transfers",
  "version": "1.0.0",
  "description": "The user scheduled a one-time or recurring transfer.",
  "_links": {
    "self": {
      "href": "/audit/recordTypes/transferScheduled"
    }
  },
  "schema": {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "https://api.apiture.com/schemas/audit/transferScheduled/v1.0.0/schema.json",
    "x-apiture-name": "transferScheduled",
    "x-apiture-category": "transfers",
    "x-apiture-categoryLabel": "Transfers",
    "x-apiture-primaryUri": "The transfer resource",
    "x-apiture-secondaryUri": "The source account",
    "type": "object",
    "title": "Transfer Scheduled",
    "description": "The user scheduled a one-time or recurring transfer.",
    "required": [
      "sourceAccountNumber",
      "sourceRoutingNumber",
      "targetAccountNumber",
      "targetRoutingNumber",
      "amount",
      "currency",
      "start"
    ],
    "properties": {
      "sourceAccountNumber": {
        "description": "The account number where funds are withdrawn.",
        "type": "string"
      },
      "sourceRoutingNumber": {
        "description": "The routing number of the financial institution where funds are withdrawn.",
        "type": "string"
      },
      "targetAccountNumber": {
        "description": "The account number where funds are deposited.",
        "type": "string"
      },
      "targetRoutingNumber": {
        "description": "The routing number of the financial institution where funds are deposited.",
        "type": "string"
      },
      "amount": {
        "description": "The amount that was scheduled to transfer.",
        "type": "string"
      },
      "currency": {
        "description": "The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this monetary value. This is always upper case ASCII. ",
        "type": "string",
        "minLength": 3,
        "maxLength": 3
      },
      "start": {
        "description": "When the transfer occurs, or when a recurring transfer begins. \n",
        "type": "string",
        "example": "2018-06-10"
      },
      "every": {
        "description": "For recurring transfers, how often the tranfser recurs.",
        "type": "string",
        "example": "P1M"
      },
      "count": {
        "description": "For a recurring transfer, this is the number of transfers which have been processed. It is a derived value and ignored on updates.",
        "type": "integer",
        "example": 5
      },
      "first": {
        "description": "If `true`, future transfers in the series should be executed on the _first_  processing day of the month.",
        "type": "boolean",
        "example": true
      },
      "last": {
        "description": "If `true`, future transfers in the series should be executed on the _last_  processing day of the month.",
        "type": "boolean",
        "example": false
      },
      "maximumCount": {
        "description": "The maximum number of transfers to perform for a recurring transfer.",
        "type": "integer",
        "example": 10
      },
      "end": {
        "description": "Do not schedule transfers beyond this date.",
        "type": "string",
        "example": "2018-08-01"
      }
    }
  }
}
Responses
| Status | Description | 
|---|---|
| 200 | OK | 
| OK | |
| Schema: recordType | |
| 304 | Not Modified | 
| Not Modified. The resource has not been modified since it was last fetched. | |
| 404 | Not Found | 
| Not Found. There is no such audit record type resource at the specified {recordTypeId}. The_errorfield in the response will contain details about the request error. | |
| Schema: errorResponse | 
Response Headers
| Status | Description | 
|---|---|
| 200 | ETagstring | 
| The ETagresponse header specifies an entity tag which must be provided in anIf-Matchrequest header forPUTorPATCHoperations which update this audit record type resource. | 
API
Endpoints which describe this API.
getApi
Code samples
# You can also use wget
curl -X GET /audit/ \
  -H 'Accept: application/hal+json' \
  -H 'API-Key: API_KEY'
GET /audit/ HTTP/1.1
Accept: application/hal+json
var headers = {
  'Accept':'application/hal+json',
  'API-Key':'API_KEY'
};
$.ajax({
  url: '/audit/',
  method: 'get',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/hal+json',
  'API-Key':'API_KEY'
};
fetch('/audit/',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'
headers = {
  'Accept' => 'application/hal+json',
  'API-Key' => 'API_KEY'
}
result = RestClient.get '/audit/',
  params: {
  }, headers: headers
p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/hal+json',
  'API-Key': 'API_KEY'
}
r = requests.get('/audit/', params={
}, headers = headers)
print r.json()
URL obj = new URL("/audit/");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
       "bytes"
       "net/http"
)
func main() {
    headers := map[string][]string{
        "Accept": []string{"application/hal+json"},
        "API-Key": []string{"API_KEY"},
        
    }
    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/audit/", data)
    req.Header = headers
    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
Top-level resources and operations in this API
GET /
Return links to the top-level resources and operations in this API.
Example responses
200 Response
{
  "id": "apiName",
  "name": "API name",
  "apiVersion": "1.0.0",
  "_profile": "https://api.apiture.com/schemas/common/root/v1.0.0/profile.json",
  "_links": {}
}
Responses
| Status | Description | 
|---|---|
| 200 | OK | 
| OK | |
| Schema: root | 
getApiDoc
Code samples
# You can also use wget
curl -X GET /audit/apiDoc \
  -H 'Accept: application/json' \
  -H 'API-Key: API_KEY'
GET /audit/apiDoc HTTP/1.1
Accept: application/json
var headers = {
  'Accept':'application/json',
  'API-Key':'API_KEY'
};
$.ajax({
  url: '/audit/apiDoc',
  method: 'get',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/json',
  'API-Key':'API_KEY'
};
fetch('/audit/apiDoc',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
require 'rest-client'
require 'json'
headers = {
  'Accept' => 'application/json',
  'API-Key' => 'API_KEY'
}
result = RestClient.get '/audit/apiDoc',
  params: {
  }, headers: headers
p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'API-Key': 'API_KEY'
}
r = requests.get('/audit/apiDoc', params={
}, headers = headers)
print r.json()
URL obj = new URL("/audit/apiDoc");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
       "bytes"
       "net/http"
)
func main() {
    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "API-Key": []string{"API_KEY"},
        
    }
    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/audit/apiDoc", data)
    req.Header = headers
    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
Return API definition document
GET /apiDoc
Return the OpenAPI document that describes this API.
Example responses
200 Response
{}
Responses
| Status | Description | 
|---|---|
| 200 | OK | 
| OK | |
| Schema: Inline | 
Response Schema
Schemas
recordType
{
  "name": "transferScheduled",
  "_profile": "https://api.apiture.com/schemas/audit/recordType/v1.0.0/profile.json",
  "label": "Transfer Scheduled",
  "category": "transfers",
  "categoryLabel": "Transfers",
  "version": "1.0.0",
  "description": "The user scheduled a one-time or recurring transfer.",
  "_links": {
    "self": {
      "href": "/audit/recordTypes/transferScheduled"
    }
  },
  "schema": {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "https://api.apiture.com/schemas/audit/transferScheduled/v1.0.0/schema.json",
    "x-apiture-name": "transferScheduled",
    "x-apiture-category": "transfers",
    "x-apiture-categoryLabel": "Transfers",
    "x-apiture-primaryUri": "The transfer resource",
    "x-apiture-secondaryUri": "The source account",
    "type": "object",
    "title": "Transfer Scheduled",
    "description": "The user scheduled a one-time or recurring transfer.",
    "required": [
      "sourceAccountNumber",
      "sourceRoutingNumber",
      "targetAccountNumber",
      "targetRoutingNumber",
      "amount",
      "currency",
      "start"
    ],
    "properties": {
      "sourceAccountNumber": {
        "description": "The account number where funds are withdrawn.",
        "type": "string"
      },
      "sourceRoutingNumber": {
        "description": "The routing number of the financial institution where funds are withdrawn.",
        "type": "string"
      },
      "targetAccountNumber": {
        "description": "The account number where funds are deposited.",
        "type": "string"
      },
      "targetRoutingNumber": {
        "description": "The routing number of the financial institution where funds are deposited.",
        "type": "string"
      },
      "amount": {
        "description": "The amount that was scheduled to transfer.",
        "type": "string"
      },
      "currency": {
        "description": "The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this monetary value. This is always upper case ASCII. ",
        "type": "string",
        "minLength": 3,
        "maxLength": 3
      },
      "start": {
        "description": "When the transfer occurs, or when a recurring transfer begins. \n",
        "type": "string",
        "example": "2018-06-10"
      },
      "every": {
        "description": "For recurring transfers, how often the tranfser recurs.",
        "type": "string",
        "example": "P1M"
      },
      "count": {
        "description": "For a recurring transfer, this is the number of transfers which have been processed. It is a derived value and ignored on updates.",
        "type": "integer",
        "example": 5
      },
      "first": {
        "description": "If `true`, future transfers in the series should be executed on the _first_  processing day of the month.",
        "type": "boolean",
        "example": true
      },
      "last": {
        "description": "If `true`, future transfers in the series should be executed on the _last_  processing day of the month.",
        "type": "boolean",
        "example": false
      },
      "maximumCount": {
        "description": "The maximum number of transfers to perform for a recurring transfer.",
        "type": "integer",
        "example": 10
      },
      "end": {
        "description": "Do not schedule transfers beyond this date.",
        "type": "string",
        "example": "2018-08-01"
      }
    }
  }
}
Audit Record Type
Representation of audit record type resources.
Properties
| Name | Description | 
|---|---|
| _links | objectAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| » additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. | 
| _embedded | objectAn optional map of nested resources, mapping each nested resource name to a nested resource representation. | 
| _profile | string(uri)The URI of a resource profile which describes the representation. | 
| _error | errorAn object which describes an error. This value is omitted if the operation succeeded without error. | 
| name | string(required)The name of this audit record type type. This is a lowerCamelCase string. read-only minLength: 8maxLength: 40 | 
| label | string(required)A short label for this audit record type. read-only minLength: 8maxLength: 80 | 
| category | number(required)Multiple record types can all belong to a category of types; this is an identifier for the category. This is a lowerCamelCase string. read-only minLength: 8maxLength: 40 | 
| categoryLabel | string(required)A short text label for the category.read-only minLength: 8maxLength: 80 | 
| version | string(semver)(required)The semantic version number of this record type and schema. read-only | 
| description | string(markdown)(required)A longer description of this audit record type. read-only minLength: 8maxLength: 800 | 
| schema | object(json-schema)(required)A JSON schema object which defines the data that is associated with all audit records which use this audit record type. read-only | 
recordTypes
{
  "_profile": "https://api.apiture.com/schemas/audit/recordTypes/v1.0.0/profile.json",
  "start": 0,
  "count": 67,
  "name": "recordTypes",
  "_links": {
    "self": {
      "href": "/audit/recordTypes?start=10&limit=10"
    },
    "collection": {
      "href": "/audit/recordTypes"
    }
  },
  "_embedded": {
    "items": [
      {
        "name": "transferScheduled",
        "_profile": "https://api.apiture.com/schemas/audit/recordType/v1.0.0/profile.json",
        "label": "Transfer Scheduled",
        "category": "transfers",
        "categoryLabel": "Transfers",
        "version": "1.0.0",
        "description": "The user scheduled a one-time or recurring transfer.",
        "_links": {
          "self": {
            "href": "/audit/recordTypes/transferScheduled"
          }
        },
        "schema": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "id": "https://api.apiture.com/schemas/audit/transferScheduled/v1.0.0/schema.json",
          "x-apiture-name": "transferScheduled",
          "x-apiture-category": "transfers",
          "x-apiture-categoryLabel": "Transfers",
          "x-apiture-primaryUri": "The transfer resource",
          "x-apiture-secondaryUri": "The source account",
          "type": "object",
          "title": "Transfer Scheduled",
          "description": "The user scheduled a one-time or recurring transfer.",
          "required": [
            "sourceAccountNumber",
            "sourceRoutingNumber",
            "targetAccountNumber",
            "targetRoutingNumber",
            "amount",
            "currency",
            "start"
          ],
          "properties": {
            "sourceAccountNumber": {
              "description": "The account number where funds are withdrawn.",
              "type": "string"
            },
            "sourceRoutingNumber": {
              "description": "The routing number of the financial institution where funds are withdrawn.",
              "type": "string"
            },
            "targetAccountNumber": {
              "description": "The account number where funds are deposited.",
              "type": "string"
            },
            "targetRoutingNumber": {
              "description": "The routing number of the financial institution where funds are deposited.",
              "type": "string"
            },
            "amount": {
              "description": "The amount that was scheduled to transfer.",
              "type": "string"
            },
            "currency": {
              "description": "The [ISO 4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) for this monetary value. This is always upper case ASCII. ",
              "type": "string",
              "minLength": 3,
              "maxLength": 3
            },
            "start": {
              "description": "When the transfer occurs, or when a recurring transfer begins. \n",
              "type": "string",
              "example": "2018-06-10"
            },
            "every": {
              "description": "For recurring transfers, how often the tranfser recurs.",
              "type": "string",
              "example": "P1M"
            },
            "count": {
              "description": "For a recurring transfer, this is the number of transfers which have been processed. It is a derived value and ignored on updates.",
              "type": "integer",
              "example": 5
            },
            "first": {
              "description": "If `true`, future transfers in the series should be executed on the _first_  processing day of the month.",
              "type": "boolean",
              "example": true
            },
            "last": {
              "description": "If `true`, future transfers in the series should be executed on the _last_  processing day of the month.",
              "type": "boolean",
              "example": false
            },
            "maximumCount": {
              "description": "The maximum number of transfers to perform for a recurring transfer.",
              "type": "integer",
              "example": 10
            },
            "end": {
              "description": "Do not schedule transfers beyond this date.",
              "type": "string",
              "example": "2018-08-01"
            }
          }
        }
      }
    ]
  }
}
Audit Record Type Collection
Collection of audit record types. The items in the collection are listed in the _embedded.items array; the name is recordTypes.
Properties
| Name | Description | 
|---|---|
| _links | objectAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| » additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. | 
| _embedded | objectEmbedded objects. | 
| » items | [recordType]An array containing audit record type items. | 
| _profile | string(uri)The URI of a resource profile which describes the representation. | 
| _error | errorAn object which describes an error. This value is omitted if the operation succeeded without error. | 
| count | integerThe number of items in the collection. This value is optional and my be omitted if the count is not computable efficiently. If a filter is applied to the collection (either implicitly or explicitly), the count, if present, indicates the number of items that satisfy the filter. | 
| start | integerThe start index of this page of items. | 
| limit | integerThe maximum number of items per page. | 
| name | stringThe name of the collection. | 
record
{
  "_id": "0399abed-fd3d-4830-a88b-30f38b8a365c",
  "_profile": "https://api.apiture.com/schemas/audit/record/v1.0.0/profile.json",
  "type": "transferScheduled",
  "occurredAt": {},
  "customerId": "32bc88e4003d061f4fdb",
  "username": "lucy.wellphunded@bankcustomer.example.com",
  "host": "13.226.38.34",
  "primaryUri": "/transfers/scheduledTransfer/a727ff2a-08ea-42ce-b8dc-edea60646819",
  "data": {
    "sourceAccount": "9876543210",
    "sourceRoutingNumber": "021000021",
    "targetAccount": "9876543219",
    "targetRoutingNumber": "021000021",
    "amount": "1500.00",
    "currency": "USD",
    "start": {}
  },
  "links": {
    "self": {
      "href": "/audit/records/0399abed-fd3d-4830-a88b-30f38b8a365c"
    },
    "apiture:type": {
      "href": "/audit/types/transferScheduled"
    }
  }
}
Audit Record
A data record representing an auditable banking activity or action performed by a user. This conveys:
- who did something (customerId,username,onBehalfOf),
- what they did (type,category),
- when they did it (occurredAt),
- where they did it (host),
- what they did it to (primaryUri,secondaryUri)
- additional datathat is specific to the activitytype.
The type is a key into the set of audit record types (see getAuditRecordType, GET /audit/recordTypes/{type}).  An audit record has a link (apiture:type) to the this audit record type resource. The record type contains a JSON schema that describes the data in the record's data object.
Properties
| Name | Description | 
|---|---|
| _links | objectAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| » additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. | 
| _embedded | objectAn optional map of nested resources, mapping each nested resource name to a nested resource representation. | 
| _profile | string(uri)The URI of a resource profile which describes the representation. | 
| _error | errorAn object which describes an error. This value is omitted if the operation succeeded without error. | 
| _id | stringThe unique identifier for this audit record. This is an immutable opaque string. read-only | 
| type | string(required)The type of this audit record. This is the key into the set of audit record types. read-only minLength: 4maxLength: 48 | 
| category | number(required)Multiple record types can all belong to a category of types; this is an identifier for the category, derived from the record type named by type. This is a lowerCamelCase string.read-only minLength: 8maxLength: 40 | 
| occurredAt | string(date-time)(required)The date-time when the action occurred or logged. The time is approximate. This is an RFC 3339 UTC date-time string. read-only | 
| customerId | stringThe customer ID of the user who performed the action. If an administrator is performing the action on behalf of a customer, this is the administrator's ID; see also onBehalfOf.read-only | 
| onBehalfOf | stringIf the audit record was generated when an admin was emulating a user, this is the customer ID of the user whom the administrator is acting on behalf of. ( customerIdwill be the ID of the administrator user.)read-only | 
| username | stringThe user name of the user who performed the action. For failed login attempts, this is the usernamethat the user tried to authenticate with. For most other operations, this is theusernameof the user. Note that since users may change their username, this is the username that was in effect when the audit record was created. If an administrator is performing the action on behalf of a customer, this is the administrator's user name. This may be<system>if the operation was performed by a system process. See alsoonBehalfOf.read-only | 
| host | stringThe host IP address of client which was used for this activity. read-only | 
| primaryUri | string(uri)The URI of the primary resource that this activity applies to. For example, if a transfer if scheduled or canceled, this is the URI of the transfer. read-only maxLength: 191 | 
| secondaryUri | string(uri)The URI of a secondary resource that this activity applies to. read-only maxLength: 191 | 
| data | objectAdditional properties of the audit record, represented as a type-specific object. The schema of this data is found in theschemaproperty of the corresponding/audit/recordTypes/{type}resource. The/recordscollection does not support sorting and filtering  based on the properties in thisdataobject.read-only | 
records
{
  "_profile": "https://api.apiture.com/schemas/audit/records/v1.0.0/profile.json",
  "start": 0,
  "limit": 1000,
  "count": 1000,
  "name": "records",
  "_links": {
    "self": {
      "href": "/audit/records?category=transfers"
    },
    "next": {
      "href": "/audit/records?category=transfers&start=1000&limit=1000"
    },
    "collection": {
      "href": "/audit/records"
    }
  },
  "_embedded": {
    "items": [
      {
        "_id": "0399abed-fd3d-4830-a88b-30f38b8a365c",
        "_profile": "https://api.apiture.com/schemas/audit/record/v1.0.0/profile.json",
        "type": "transferScheduled",
        "occurredAt": {},
        "username": "lucy.wellphunded@bankcustomer.example.com",
        "host": "13.226.38.34",
        "primaryUri": "/transfers/scheduledTransfer/a727ff2a-08ea-42ce-b8dc-edea60646819",
        "data": {
          "sourceAccount": "9876543210",
          "sourceRoutingNumber": "021000021",
          "targetAccount": "9876543219",
          "targetRoutingNumber": "021000021",
          "amount": "1500.00",
          "currency": "USD",
          "start": {}
        },
        "links": {
          "self": {
            "href": "/audit/records/0399abed-fd3d-4830-a88b-30f38b8a365c"
          },
          "apiture:type": {
            "href": "/audit/types/transferScheduled"
          }
        }
      }
    ]
  }
}
Audit Record Collection
Collection of audit records. The items in the collection are ordered in the _embedded.items array; the name is records. The top-level _links object may contain pagination links (self, next, prev, first, last, collection).
Properties
| Name | Description | 
|---|---|
| _links | objectAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| » additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. | 
| _embedded | objectEmbedded objects. | 
| » items | [record]An array containing a page of audit record items. | 
| _profile | string(uri)The URI of a resource profile which describes the representation. | 
| _error | errorAn object which describes an error. This value is omitted if the operation succeeded without error. | 
| count | integerThe number of items in the collection. This value is optional and my be omitted if the count is not computable efficiently. If a filter is applied to the collection (either implicitly or explicitly), the count, if present, indicates the number of items that satisfy the filter. | 
| start | integerThe start index of this page of items. | 
| limit | integerThe maximum number of items per page. | 
| name | stringThe name of the collection. | 
root
{
  "id": "apiName",
  "name": "API name",
  "apiVersion": "1.0.0",
  "_profile": "https://api.apiture.com/schemas/common/root/v1.0.0/profile.json",
  "_links": {}
}
API Root
A HAL response, with hypermedia _links for the top-level resources and operations in API.
Properties
| Name | Description | 
|---|---|
| _links | objectAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| » additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. | 
| _embedded | objectAn optional map of nested resources, mapping each nested resource name to a nested resource representation. | 
| _profile | string(uri)The URI of a resource profile which describes the representation. | 
| _error | errorAn object which describes an error. This value is omitted if the operation succeeded without error. | 
| _id | stringThis API's unique ID. | 
| name | stringThis API's name. | 
| apiVersion | stringThis API's version. | 
errorResponse
{
  "_profile": "https://api.apiture.com/schemas/common/errorResponse/v1.0.0/profile.json",
  "_error": {
    "_id": "2eae46e1-575c-4d69-8a8f-0a7b0115a4b3",
    "message": "The value for deposit must be greater than 0.",
    "statusCode": 422,
    "type": "positiveNumberRequired",
    "attributes": {
      "value": -125.5
    },
    "remediation": "Provide a value which is greater than 0",
    "occurredAt": "2018-01-25T05:50:52.375Z",
    "_links": {
      "describedby": {
        "href": "https://api.apiture.com/errors/positiveNumberRequired"
      }
    },
    "_embedded": {
      "errors": []
    }
  }
}
Error Response
Describes an error response, typically returned on 4xx or 5xx errors from API operations. The _error object contains the error details.
Properties
| Name | Description | 
|---|---|
| _links | objectAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| » additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. | 
| _embedded | objectAn optional map of nested resources, mapping each nested resource name to a nested resource representation. | 
| _profile | string(uri)The URI of a resource profile which describes the representation. | 
| _error | errorAn object which describes an error. This value is omitted if the operation succeeded without error. | 
link
{
  "href": "/contacts/contacts/328f6bf6-d762-422f-a077-ab91ca4d0b6f",
  "title": "Applicant"
}
Link
Describes a hypermedia link within a _links object in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use the name or hreflang properties of HAL. Apiture links may include a method property.
Properties
| Name | Description | 
|---|---|
| href | string(uri)(required)The URI or URI template for the resource/operation this link refers to. | 
| type | stringThe media type for the resource. | 
| templated | booleanIf true, the link's href is a URI template. | 
| title | stringAn optional human-readable localized title for the link. | 
| deprecation | string(uri)If present, the containing link is deprecated and the value is a URI which provides human-readable text information about the deprecation. | 
| profile | string(uri)The URI of a profile document, a JSON document which describes the target resource/operation. | 
error
{
  "_id": "2eae46e1-575c-4d69-8a8f-0a7b0115a4b3",
  "message": "The value for deposit must be greater than 0.",
  "statusCode": 422,
  "type": "positiveNumberRequired",
  "attributes": {
    "value": -125.5
  },
  "remediation": "Provide a value which is greater than 0",
  "occurredAt": "2018-01-25T05:50:52.375Z",
  "_links": {
    "describedby": {
      "href": "https://developer.apiture.com/errors/positiveNumberRequired"
    }
  },
  "_embedded": {
    "errors": []
  }
}
Error
Describes an error in an API request or in a service called via the API.
Properties
| Name | Description | 
|---|---|
| message | string(required)A localized message string describing the error condition. | 
| _id | stringA unique identifier for this error instance. This may be used as a correlation ID with the root cause error (i.e. this ID may be logged at the source of the error). This is is an opaque string. | 
| statusCode | integerThe HTTP status code associate with this error. minimum: 100maximum: 599 | 
| type | stringAn error identifier which indicates the category of error and associate it with API support documentation or which the UI tier can use to render an appropriate message or hint. This provides a finer level of granularity than the statusCode. For example, instead of just 400 Bad Request, thetypemay be much more specific. such asintegerValueNotInAllowedRangeornumericValueExceedsMaximumorstringValueNotInAllowedSet. | 
| occurredAt | string(date-time)An RFC 3339 UTC time stamp indicating when the error occurred. | 
| attributes | attributesInformative values or constraints which describe the error. For example, for a value out of range error, the attributes may specify the minimumandmaximumvalues. This allows clients to present error messages as they see fit (the API does not assume the client/presentation tier). The set of attributes varies by errortype. | 
| remediation | stringAn optional localized string which provides hints for how the user or client can resolve the error. | 
| errors | [error]An optional array of nested error objects. This property is not always present. | 
| _links | linksAn optional map of links, mapping each link relation to a link object. This model defines the _linksobject of HAL representations. | 
| _embedded | objectEmbedded objects. An error object may contain nested errors. For example, an API which validates its request body may find multiple errors in the request, which are returned with an error response with nested errors. These are held in an itemsarray oferrorResponseobjects._embeddedor_embedded.itemsmay not exist if the error does not have nested errors. This property is deprecated; use seeerror.errorsinstead. | 
| » items | [errorResponse]An array of error objects. | 
attributes
{}
Attributes
An optional map of name/value pairs which contains additional dynamic data about the resource.
Properties
links
{
  "property1": {
    "href": "/contacts/contacts/328f6bf6-d762-422f-a077-ab91ca4d0b6f",
    "title": "Applicant"
  },
  "property2": {
    "href": "/contacts/contacts/328f6bf6-d762-422f-a077-ab91ca4d0b6f",
    "title": "Applicant"
  }
}
Links
An optional map of links, mapping each link relation to a link object. This model defines the _links object of HAL representations.
Properties
| Name | Description | 
|---|---|
| additionalProperties | linkDescribes a hypermedia link within a _linksobject in HAL representations. In Apiture APIs, links are HAL links, but Apiture APIs do not use thenameorhreflangproperties of HAL. Apiture links may include amethodproperty. |