Payload structure for a basic response
The following sections describe the response payload for a basic response. For the purpose of this discussion, a basic response is a response that contains information about a specific element or collection, but does not contain any included resources. Included resources are discussed in Payload structure for a response with included resources.
Structure of a basic response
The high-level structure of a basic response is shown below. The
first and last properties (count
and collection-level
links
) are used only for collection payloads. All other properties
are used for both element and collection payloads.
(Note: JSON does not support comments. However, to clarify the code, pseudo-comments have been added. Each pseudo-comment is preceded by a hashtag (#).)
{
"count": N, # Number of resources in collection*
"data": [ # List of resources
{ # Resource 1 begins here
"attributes": { # Resource 1 name/value pairs
"propertyName": "propertyValue",
... },
"checksum": "val", # Resource 1 checksum value
"links": { ... } # Resource 1 links
}, # Resource 1 ends here
{ # Resource 2 begins here
"attributes": { # Resource 2 name/value pairs
"propertyName": "propertyValue",
... },
"checksum": "val", # Resource 2 checksum value
"links": { ... } # Resource 2 links
}, # Resource 2 ends here
... ], # Resources 3 to N
"links": { ... } # Collection-level links*
}
# *-used only for collection responses
The count
property
The count
property identifies the number of
elements returned in the payload. It is used only in responses that contain collections.
The data
section
The data
section contains information about the
resources returned by the endpoint. For each resource, the following subsections appear by
default:
- attributes - A set of name/value pairs for the fields of each resource.
- checksum - A checksum value for each resource.
- links - HTTP links that can be used to take action on each resource.
If an endpoint returns a single element, the data section has a single set of
attributes
, checksum
, and links
. If an
endpoint returns a collection, the data section has one set of attributes
,
checksum
, and links
for each resource.
The attributes
section
The attributes
subsection lists the fields returned for a resource, and the
values for those fields. For example:
"attributes": {
"activityPattern": "check_coverage",
"activityType": {
"code": "general",
"name": "General"
},
...
},
Each resource has a default set of fields that are returned. This is typically a subset of
all the fields that could be returned. You can override the default set of fields returned
using the fields
query parameter. For more information, see The fields query parameter.
Simple values
When a field is a scalar, its value is listed after the colon. For example:
"subject": "Verify which coverage is appropriate"
ID properties
Every resource has an id
field. This has the same value as the Public ID
of the object in PolicyCenter. This is typically one of the
fields returned by default. For example:
"id": "xc:20",
This value is also used in an endpoint that names a specific element, such as:
GET /activities/xc:20/notes
Date and datetime values
Date and datetime values appear in payloads as a string with the following format:- Datetime:
YYYY-MM-DDThh:mm:ss.fffZ
- Date:
YYYY-MM-DD
where:
YYYY
is the yearMM
is the monthDD
is the day- For datetime values:
T
is a literal value that separates the date portion and the time portionhh
is the hourmm
is the minutess
is the secondfff
is the second fractionZ
is a literal value that means "zero hour offset". It is also known as "Zulu time" (UTC)
For example:
"dueDate": "2020-03-23T07:00:00.000Z",
Be aware that, for some fields, Cloud API requires a date value as an input.
But, PolicyCenter stores the value as a datetime value, and therefore the value in response
payloads is a datetime value. This behavior is an attempt to closely model the PolicyCenter
behavior of adding a time value to entered date values. For example, the
JobEffectiveDate
field is specified in the
CreateSubmissionAttributes
schema as a date value. But once the
submission has been created, the JobEffectiveDate
field in the response
payload will have a datetime value.
Inlined resources
Some response payloads contain inlined resources. An inlined resource is a resource that is not the root resource, but some of its fields are listed in the attributes section by default along with fields from the root resource. Inlined resources follow the format:
"inlinedResourceName": {
"inlinedResourceField1": value,
"inlinedResourceField2": value,
...
},
Inlined resources are declared in the response schema. Similar to scalar values, you can
control which inlined resources and inlined resource fields are returned in a response by
using the fields
query parameter. For more information, see The fields query parameter.
Broadly speaking, there are four types of inlined resources: typelists, currency amount values, simple references, and complex references.
Typelists are listed with a code field and a name field. They use the
TypeCodeReferences
schema. For example:
"priority": {
"code": "urgent",
"name": "Urgent"
},
Currency amount values have a currency field and an amount field. For example:
"transactionAmount": {
"amount": "500.00",
"currency": "usd"
Simple references are references to a related object that use the
SimpleReferences
schema. This schema includes only the following fields:
displayName
, id
, refId
,
type
, and uri
. By default, most endpoints return only
displayName
and id
.
For example, in the following snippet, assignedGroup
and
assignedUser
are simple references:
"assignedGroup": {
"displayName": "Auto1 - TeamA",
"id": "demo_sample:31"
},
"assignedUser": {
"displayName": "Andy Applegate",
"id": "demo_sample:1"
},
Complex references are references to a related object that uses a schema more
complex than the SimpleReferences
schema. For example, when a contact's
primary address is added to a response payload, it uses the Address
schema,
which includes a larger number of fields.
Fields with null values are omitted
Response payloads contain only fields whose values are non-NULL. Fields with NULL values are omitted from the response payload.
If a given field is expected in a response payload but it is missing, this is often because the value was NULL.
The checksum
field
The checksum
field lists a value that identifies
the "version" of a resource. Whenever a resource is modified at the database level, it is
assigned a new checksum value. Processes that modify data can use checksums to verify that a
resource has not been modified by some other process in between the time the resource was read
and the time the resource is to be modified.
For more information, see Lost updates and checksums.
The links
subsection (for an element)
The links
subsection of the data
section lists a set of paths which identify actions that can be taken on the specific
element, if any. Each link has a name, an href
property, and a list of
methods. Caller applications can use these links to construct HTTP requests for
additional actions to take on that resource.
links
subsection of the data
section is one of
the way in which Cloud API enforces the Hypermedia as the Engine of Application State
(HATEOAS) constraint.For example, suppose that a given caller application gets activity xc:20. This application has sufficient permission to assign this activity and to view the notes associated with this activity. The following would appear in the links section for activity xc:20:
"links": {
"assign": {
"href": "/common/v1/activities/xc:20/assign",
"methods": [
"post"
]
},
"notes": {
"href": "/common/v1/activities/xc:20/notes",
"methods": [
"get",
"post"
]
},
"self": {
"href": "/common/v1/activities/xc:20",
"methods": [
"get"
]
}
}
The self
link is a link to the resource itself. The self
link is useful when a caller application receives a list of resources and wants to
navigate to a specific resource in the list.
For a given object, links that execute business actions appear only if the action makes sense given the state of the object, and only if the caller has sufficient permission to execute the action. For example, the link to close an activity will not appear if the activity is already closed. Similarly, the link to assign an activity will not appear if the caller lacks permission to assign activities.
The collection-level links
section
If a response contains a collection, there is a
links
section at the end of the payload. This section is a sibling of the
data
section. It contains links that are relevant to the entire collection,
such as the prev
and next
links that let you page through a
large set of resources.
links
section at the end of a collection-level payload is one of the
way in which Cloud API enforces the Hypermedia as the Engine of Application State (HATEOAS)
constraint.