<!-- https://staircase.co/delivery/shipping/comply -->
# Comply

# Comply

Compliance evidence generated by the pipeline that ships the code: control status against named standards, and a secure workspace for remote access.

Comply checks source code and infrastructure against committed control sets — `NIST`, `PCI`, `SOC 2` and `HIPAA` among them — and reports misconfigurations and violations in near real time rather than at review time.

Findings are broadcast into Health, so a configuration that drifts out of policy surfaces in the same place an operator is already watching, and can be corrected there.

## How it works

It also provides the secure workspace an engineer outside the United States works from to reach the cloud console and the product APIs, and it is the path that issues temporary maintenance credentials after the environment owner approves the request.

Evidence is generated continuously because the alternative measures a moment. A control verified once a year has an unknown state between verifications, and that gap is exactly where drift lives.

Comply is callable on its own as well as being a pipeline stage, which is what lets an environment be assessed without a deployment.

## Operations

<!--source:api-specifications-->

### Audit
<!--/source-->

`POST` `/audit/vanta_role`

<!--source:api-specifications-->

#### Create Vanta Role
<!--/source-->

`create-vanta-role`

<!--source:api-specifications-->
Create vanta role
<!--/source-->

<!--source:api-specifications-->
Create vanta role creates a role to integrate your environment with vanta.com, an application for security audit. This service output an arn role that can be used inside vanta application to give vanta access to audit your environment.

This service assumes that you have a vanta account, and you are aware of the external_id and account_id associated with that account.

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "external_id": "BA51515716F989E",
 "account_id": "956993596393"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "vanta_role_arn": "arn:aws:iam::891306488523:role/vanta-auditor-202d30c9-06ce-4de0-889a-a17721d670d0"
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `external_id`required | `string` | <!--source:api-specifications-->External id from vanta.com<!--/source--> |
| `account_id`required | `string` | <!--source:api-specifications-->Account id from vanta.com<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `vanta_role_arn` | `string` | <!--source:api-specifications-->Vanta role arn which can be added to vanta to start auditing your environment<!--/source--> |

##### Other responses

`400``401``403``404`

`DELETE` `/audit/vanta_role/{role_name}`

<!--source:api-specifications-->

#### Delete Vanta Role
<!--/source-->

`delete-vanta-role`

<!--source:api-specifications-->
Delete vanta role
<!--/source-->

<!--source:api-specifications-->
Delete vanta role deletes an existing role for vanta.com by name, you can get the role name by using the service Retrieve Vanta Roles

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "SUCCEEDED"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `role_name` required | `string` path | `vanta-auditor-addg9e54-53dd-48aa-bad1-82762a05ab44` | <!--source:api-specifications-->Role name for vanta.com<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `status` | `string` | <!--source:api-specifications-->Response status<!--/source--> |

##### Other responses

`400``401``403``404`

`GET` `/audit/vanta_roles`

<!--source:api-specifications-->

#### Retrieve Vanta Roles
<!--/source-->

`retrieve-vanta-role`

<!--source:api-specifications-->
Retrieve vanta roles retrieves a list of roles created to integrate your environment with vanta.com

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "vanta_roles": [
 {
 "role_name": "vanta-auditor-ee373866-5447-435f-b4e0-43390de1392a",
 "vanta_role_arn": "arn:aws:iam::791306477523:role/vanta-auditor/vanta-auditor-ee373866-5447-435f-b4e0-43390de1392a",
 "account_id": "956993596390",
 "external_id": "BA51515716F989F"
 }
 ]
}
```

<!--/source-->

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `vanta_roles` | `object[]` | <!--source:api-specifications-->Vanta roles<!--/source--> |
| `role_name` | `string` | <!--source:api-specifications-->Auto-generated role name<!--/source--> |
| `vanta_role_arn` | `string` | <!--source:api-specifications-->Vanta role arn which can be added to vanta.com<!--/source--> |
| `account_id` | `string` | <!--source:api-specifications-->Account id from vanta.com<!--/source--> |
| `external_id` | `string` | <!--source:api-specifications-->External id from vanta.com<!--/source--> |

##### Other responses

`400``401``403``404`

`PUT` `/audit/cloudtrail`

<!--source:api-specifications-->

#### Set Cloudtrail Status
<!--/source-->

`set-cloudtrail-status`

<!--source:api-specifications-->
Set cloudtrail status
<!--/source-->

<!--source:api-specifications-->
Set cloudtrail status enables and disables the generation of the cloudtrail logs which are necessary to meet security requirements for vanta.com

<!--/source-->

##### Request

<!--source:api-specifications-->
Disabling cloudtrailEnabling cloudtrail
<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "cloudtrail_enabled": "false"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "cloudtrail_enabled": "true"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "SUCCEEDED"
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `cloudtrail_enabled`required | `string` | <!--source:api-specifications-->Cloudtrail logs status<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `status` | `string` | <!--source:api-specifications-->Response status<!--/source--> |

##### Other responses

`400``401``403``404`

<!--source:api-specifications-->

### Workspace
<!--/source-->

`GET` `/bundles`

<!--source:api-specifications-->

#### Retrieve Bundles
<!--/source-->

`get-workspace-bundles`

<!--source:api-specifications-->
Retrieve workspaces bundles Retrieves a list that describes the available WorkSpace bundles.

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "Bundles": [
 {
 "BundleID": "ws-8kvnwmhz4",
 "Name": "Bundle name",
 "Description": "Description"
 }
 ]
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `next_token` | `string` query | `123456` | <!--source:api-specifications-->The token to use to retrieve the next page of results. This value is null when there are no more results to return.<!--/source--> |
| `owner` | `string` query | `123456` | <!--source:api-specifications-->To describe the bundles provided by Amazon Web Services, specify AMAZON. To describe the bundles that belong to your account, don't specify a value.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `Bundles` | `object[]` | <!--source:api-specifications-->Array of workspaces Bundles information<!--/source--> |

##### Other responses

`400``401``403``404``422`

`POST` `/bundles`

<!--source:api-specifications-->

#### Create Bundles
<!--/source-->

`create-bundles`

<!--source:api-specifications-->
Create bundles
<!--/source-->

<!--source:api-specifications-->
'Create image Creates the specified WorkSpace bundle. For more information about creating WorkSpace bundles, see Create a Custom WorkSpaces Image and Bundle.'

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "name": "DefaultBundle",
 "description": "Default Bundle",
 "image_id": "wsb-gk1wpk43z",
 "compute_type": "STANDARD",
 "user_storage": "5",
 "root_storage": "5"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "The bundle is being created."
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
6 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `name`required | `string` | <!--source:api-specifications-->The name of the bundle.<!--/source--> |
| `description`required | `string` | <!--source:api-specifications-->The description of the bundle.<!--/source--> |
| `image_id`required | `string` | <!--source:api-specifications-->The identifier of the image that is used to create the bundle.<!--/source--> |
| `compute_type`required | `string` | <!--source:api-specifications-->Describes the computed type of the bundle.<!--/source--> |
| `user_storage`required | `string` | <!--source:api-specifications-->The size of the user volume.<!--/source--> |
| `root_storage`required | `string` | <!--source:api-specifications-->The size of the root volume.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->The status message about the creation<!--/source--> |

##### Other responses

`400``401``403``404``422`

`PUT` `/default-bundle`

<!--source:api-specifications-->

#### Update Default Bundle
<!--/source-->

`update-default-bundle`

<!--source:api-specifications-->
Update default bundle
<!--/source-->

<!--source:api-specifications-->
'Update default bundle Updates the default bundle that will be used when creating workspaces'

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "budnle_id": "wsb-gk1wpk43z"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Succeeded"
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `bundle_id`required | `string` | <!--source:api-specifications-->The identifier of the bundle for the WorkSpace. You can use DescribeWorkspaceBundles to list the available bundles.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->The status message about the creation<!--/source--> |

##### Other responses

`400``401``403``404``422`

`GET` `/images`

<!--source:api-specifications-->

#### Retrieve Images
<!--/source-->

`get-workspace-images`

<!--source:api-specifications-->
Retrieve workspaces images Retrieves a list that describes one or more images.

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "Images": [
 {
 "ImageID": "ws-8kvnwmhz4",
 "Name": "Image name",
 "Description": "Description"
 }
 ]
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `next_token` | `string` query | `123456` | <!--source:api-specifications-->The token to use to retrieve the next page of results. This value is null when there are no more results to return.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `Images` | `object[]` | <!--source:api-specifications-->Array of workspaces images information<!--/source--> |

##### Other responses

`400``401``403``404``422`

`POST` `/images`

<!--source:api-specifications-->

#### Create Image
<!--/source-->

`create-image`

<!--source:api-specifications-->
Create image Creates a new updated WorkSpace image based on the specified source image.

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "bundle_id": "wsb-gk1wpk43z",
 "name": "DefaultImage",
 "description": "Default image"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "The image is being created."
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
3 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `bundle_id` | `string` | <!--source:api-specifications-->The identifier of the bundle for the WorkSpace. You can use DescribeWorkspaceBundles to list the available bundles.<!--/source--> |
| `description` | `string` | <!--source:api-specifications-->A description of whether updates for the WorkSpace image are available.<!--/source--> |
| `name`required | `string` | <!--source:api-specifications-->The name of the new updated WorkSpace image.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->The status message about the creation<!--/source--> |

##### Other responses

`400``401``403``404``422`

`POST` `/workspace`

<!--source:api-specifications-->

#### Create Workspace
<!--/source-->

`create-workspace`

<!--source:api-specifications-->
Create workspace creates a workspace for the user provided.

<!--/source-->

##### Request

<!--source:api-specifications-->
Create a default workspaceCreate a custom workspace
<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "given_name": "Given Name",
 "surname": "Surname"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "bundle_id": "wsb-gk1wpk43z",
 "given_name": "Given Name",
 "surname": "Surname"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
200422
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "The workspace is being created. The user will receive and email with instructions and information about the workspace."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "The entity can not be processed."
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
3 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `bundle_id` | `string` | <!--source:api-specifications-->The identifier of the bundle for the WorkSpace. You can use DescribeWorkspaceBundles to list the available bundles.<!--/source--> |
| `given_name`required | `string` | <!--source:api-specifications-->The given name of the user the workspace will be created for.<!--/source--> |
| `surname`required | `string` | <!--source:api-specifications-->The surname of the user the workspace will be created for.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->The status message about the creation of the workspace<!--/source--> |

##### Response `422``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Unprocessable Entity
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `error` | `object` | <!--source:api-specifications-->Unprocessable entity error.<!--/source--> |
| `message`required | `string` | <!--source:api-specifications-->Error description.<!--/source--> |

##### Other responses

`400``401``403``404`

`DELETE` `/workspace/{workspace_id}`

<!--source:api-specifications-->

#### Delete Workspace
<!--/source-->

`delete-workspace`

<!--source:api-specifications-->
Delete workspace deletes a workspace and its associated user.

<!--/source-->

##### Response

<!--source:api-specifications-->
200422 Not existent422 Missing id422 Rippling synchronization422 Deletion disabled422 application/json
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Workspace deletion has started."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "The workpsace does not exist."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "Workspace id must be provided."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "This workspace can only be deleted via Rippling automated synchronization."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "Workspace creation/deletion is disabled."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "The entity can not be processed."
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `workspace_id` required | `string` path | `ws-cv8hqyrjr` | <!--source:api-specifications-->Id of the workspace that will be deleted.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->The status message<!--/source--> |

##### Response `422``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Unprocessable Entity
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `error` | `object` | <!--source:api-specifications-->Unprocessable entity error.<!--/source--> |
| `message`required | `string` | <!--source:api-specifications-->Error description.<!--/source--> |

##### Other responses

`400``401``403``404`

`PUT` `/workspace/{workspace_id}`

<!--source:api-specifications-->

#### Update Workspace
<!--/source-->

`update-workspace`

<!--source:api-specifications-->
Update workspace Update a workspace compute type. Compute type payload attribute can have the following values:

- VALUE [1 CPU, 2 GB Memory, 80|10 GB root|user storage]
- STANDARD [2 CPU, 4 GB Memory, 80|50 GB root|user storage]
- PERFORMANCE [2 CPU, 7.5 GB Memory, 80|100 GB root|user storage]
- POWER [4 CPU, 16 GB Memory, 175|100 GB root|user storage]
- POWERPRO [8 CPU, 32 GB Memory, 175|100 GB root|user storage]
- GRAPHICS [8 CPU, 15 GB Memory, 100|100 GB root|user storage]
- GRAPHICSPRO [16 CPU, 122 GB Memory, 100|100 GB root|user storage]

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "compute_type": "VALUE"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Workspace update has started."
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `workspace_id` required | `string` path | `ws-cv8hqyrjr` | <!--source:api-specifications-->Id of the workspace that will be updated.<!--/source--> |
| `Authorization` required | `string` header | `<redacted>` | <!--source:api-specifications-->Authorization token.<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `compute_type` | `string` | <!--source:api-specifications-->Compute type.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->The status message<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/workspace/reset-password`

<!--source:api-specifications-->

#### Reset Password
<!--/source-->

`reset-workspace-password`

<!--source:api-specifications-->
Reset Password set new password using authorized credentials

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "token": "123"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Succeeded."
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `new_password` | `string` | <!--source:api-specifications-->New password.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Message describing process.<!--/source--> |

##### Other responses

`400``401``403``404``422`

`GET` `/workspaces`

<!--source:api-specifications-->

#### Retrieve Workspaces
<!--/source-->

`get-workspace`

<!--source:api-specifications-->
Retrieve workspaces returns a list of workspaces.

<!--/source-->

##### Response

<!--source:api-specifications-->
200422
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "Workspaces": {
 "WorkspaceId": "ws-8kvnwmhz4",
 "DirectoryId": "d-90675e3e71",
 "UserName": "efrain.coello",
 "IpAddress": "10.1.0.137",
 "State": "STOPPED",
 "BundleId": "wsb-gk1wpk43z",
 "SubnetId": "subnet-034c07dc6446907de",
 "ComputerName": "WSAMZN-4M9H1COV"
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Unprocessable Entity

```
{
 "message": "The entity can not be processed."
}
```

<!--/source-->

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `Workspaces` | `object[]` | <!--source:api-specifications-->Array of workspaces information<!--/source--> |

##### Response `422``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Unprocessable Entity
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `error` | `object` | <!--source:api-specifications-->Unprocessable entity error.<!--/source--> |
| `message`required | `string` | <!--source:api-specifications-->Error description.<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/compliance_metrics`

<!--source:api-specifications-->

#### Trigger Rippling Synchronization
<!--/source-->

`trigger-rippling-sync`

<!--source:api-specifications-->
Trigger rippling synchronization starts the synchronization with Rippling. The token is validated against Rippling. If the token is valid the synchronization is triggered but, the token is not saved for the scheduled synchronization calls.

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "rippling_token": "73ghdygye737YTY73euyetdyydu73587ksjeifhyYGDJ"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
200400
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Successfully started rippling synchronization."
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy Bad Request

```
{
 "message": "Rippling token provided is invalid."
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `rippling_token`required | `string` | <!--source:api-specifications-->Rippling token that should match the token used for the Rippling synchronization<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Response status<!--/source--> |

##### Response `400``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
Bad Request
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Error description.<!--/source--> |

##### Other responses

`401``403``404`

<!--source:api-specifications-->

### Compliance
<!--/source-->

`POST` `/compliance`

<!--source:api-specifications-->

#### Create Compliance
<!--/source-->

`new-compliance`

<!--source:api-specifications-->
Comply looks for security violations based on security rules of comply for a given product.

Comply returns an compliance_id in the response body. To retrieve the results of the security validation, call Retrieve Compliance Status with the compliance_id.

Requirements to pass comply.

1. The name of your project in asana must be the same as the product ontology. 2 Get your asana token here ``````.
1. Add the custom field "Github" to your asana project.
1. Add the link to your pull request in asana task custom field "Github" field.
1. The task must be in the column "In progress" of asana.

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "source_url": "https://code-dev-0258.s3.amazonaws.com/code-comply/1506dbf2/source.zip?AWSAccessKeyId=2323",
 "product_name": "Comply"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "compliance_id": "9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
4
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `asana_token` required | `string` header | `1/1199400791141010:f1d4b85a291da54a88e14813a91d4b97` | <!--source:api-specifications-->Authorization Asana Token<!--/source--> |
| `github_token` required | `string` header | `e50d125791d8c9ca25774ab0a758205d74f726ed` | <!--source:api-specifications-->GitHub Token<!--/source--> |
| `comply_client_id` | `string` header | `6779ef20e75817b79602` | <!--source:api-specifications-->Client credential generated by comply authentication<!--/source--> |
| `comply_client_secret` | `string` header | `269d98e4922fb3895e9ae2108cbb5064` | <!--source:api-specifications-->Client credential generated by comply authentication<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `source_url`required | `string` | <!--source:api-specifications-->URL to project source code.<!--/source--> |
| `product_name`required | `string` | <!--source:api-specifications-->Product Name.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `compliance_id` | `string` | <!--source:api-specifications-->Compliance id, used for get compliance status<!--/source--> |

##### Other responses

`400``401``403``404`

`GET` `/compliance_metrics`

<!--source:api-specifications-->

#### Retrieve Compliance Metrics Generation
<!--/source-->

`get-compliance-metrics`

<!--source:api-specifications-->
Retrieve compliance metrics generation status
<!--/source-->

<!--source:api-specifications-->
Retrieve compliance metrics generation status shows whether compliance metrics are being sent to health product or not.

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Sending compliance metrics is enabled."
}
```

<!--/source-->

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Response status<!--/source--> |

##### Other responses

`400``401``403``404`

`GET` `/compliance/{compliance_id}`

<!--source:api-specifications-->

#### Retrieve Compliance Status
<!--/source-->

`compliance-status`

<!--source:api-specifications-->
Retrieve Compliance Status retrieves the results of the security validation and SOC2 process compliance status such as Change request process performed by Comply for the given compliance_id.

<!--/source-->

##### Response

<!--source:api-specifications-->
200 Succeeded response200 Failed response
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "compliance_id": "9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg",
 "metadata": {
 "service-comply": {
 "id": "9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg",
 "issuer": "https://api.staircaseapi.com/comply",
 "status": "SUCCEEDED",
 "severity_label": "LOW",
 "timestamp": 1611949487.728646,
 "version": "1.0.0"
 },
 "service-code": {
 "commit_hash": "5a8d1bbd276306e73ad5fcb1c45dfe3bb2e6c5c2",
 "id": "1506dbf2-ea7b-4b76-9f51-2ebb0ac49af1",
 "issuer": "https://api.staircaseapi.com/code",
 "status": "SUCCEEDED",
 "timestamp": 1611948276.2954555,
 "version": 1.1
 }
 },
 "source_url": "https://code-comply-oybto4.s3.amazonaws.com/comply/devops-code-comply-a51a-56d91d7ed7df/build.zip?AWSAccessKeyId=2525&Signature=TyI1LC0",
 "status": "SUCCEEDED",
 "warnings": {
 "security_violations": [
 {
 "resource_id": "arn:aws:lambda:us-east-1:791306477523:function:code-assessor-dev-apiGatewayLogHandler",
 "resource_type": "AwsLambdaFunction",
 "severity": "LOW",
 "standar": "PCI-DSS",
 "remediation": "https://docs.aws.amazon.com/console/securityhub/PCI.Lambda.2/remediation",
 "description": "PCI.Lambda.2 Lambda functions should be in a VPC",
 "resource_name": "code-assessor-dev-apigatewayloghandler",
 "stack_name": "code-assessor-dev",
 "product_name": "Assess"
 }
 ]
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "compliance_id": "9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg",
 "errors": {
 "process_violations": [
 {
 "process": "Change request process",
 "message": "Section Accepted not found"
 }
 ]
 },
 "metadata": {
 "service-comply": {
 "id": "9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg",
 "issuer": "https://api.staircaseapi.com/comply",
 "status": "FAILED",
 "severity_label": "HIGH",
 "timestamp": 1611949487.728646,
 "version": "1.0.0"
 },
 "service-code": {
 "commit_hash": "5a8d1bbd276306e73ad5fcb1c45dfe3bb2e6c5c2",
 "id": "1506dbf2-ea7b-4b76-9f51-2ebb0ac49af1",
 "issuer": "https://api.staircaseapi.com/code",
 "status": "SUCCEEDED",
 "timestamp": 1611948276.2954555,
 "version": 1.1
 }
 },
 "status": "FAILED",
 "source_url": "https://code-comply-oybto4.s3.amazonaws.com/comply/devops-code-comply-a51a-56d91d7ed7df/build.zip?AWSAccessKeyId=2525&Signature=TyI1LC0",
 "warnings": {
 "security_violations": [
 {
 "resource_id": "arn:aws:lambda:us-east-1:791306477523:function:code-assessor-dev-insertRule",
 "resource_type": "AwsLambdaFunction",
 "severity": "MEDIUM",
 "standar": "AWS-Foundational-Security-Best-Practices",
 "remediation": "https://docs.aws.amazon.com/console/securityhub/Lambda.4/remediation",
 "description": "Lambda.4 Lambda functions should have a dead-letter queue configured",
 "resource_name": "code-assessor-dev-insertrule",
 "stack_name": "code-assessor-dev",
 "product_name": "Assess"
 }
 ]
 }
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `compliance_id` required | `string` path | `9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg` | <!--source:api-specifications-->id of Compliance<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
6 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `compliance_id` | `string` | <!--source:api-specifications-->Compliance id<!--/source--> |
| `errors` | `object` | <!--source:api-specifications-->Compliance errors<!--/source--> |
| `security_violations` | `object` | <!--source:api-specifications-->Contains security violations<!--/source--> |
| `source_url` | `string` | <!--source:api-specifications-->Presigned URL metadata in the header for Comply and other products. This metadata is in use as a signature of successful compliance.<!--/source--> |
| `status` | `string` | <!--source:api-specifications-->Status of compliance<!--/source-->`COMPLIANT``FAILED``FAULT``IN_PROGRESS``NON_COMPLIANT``STOPPED``SUCCEEDED``TIMED_OUT` |
| `metadata` | `object` | <!--source:api-specifications-->Compliance metadata plus metadata included in the compliance presigned URL coming from other products<!--/source--> |
| `service-comply` | `object` | <!--source:api-specifications-->Compliance metadata<!--/source--> |
| `id` | `string` | <!--source:api-specifications-->Compliance id<!--/source--> |
| `issuer` | `string` | <!--source:api-specifications-->Compliance issuer<!--/source--> |
| `status` | `string` | <!--source:api-specifications-->Compliance status<!--/source-->`COMPLIANT``FAILED``FAULT``IN_PROGRESS``NON_COMPLIANT``STOPPED``SUCCEEDED``TIMED_OUT` |
| `severity_label` | `string` | <!--source:api-specifications-->Compliance severity label<!--/source-->`CRITICAL``HIGH``INFORMATIONAL``LOW``MEDIUM` |
| `timestamp` | `object` | <!--source:api-specifications-->Compliance timestamp<!--/source--> |
| `version` | `object` | <!--source:api-specifications-->Compliance version<!--/source--> |
| `warnings` | `object` | <!--source:api-specifications-->Compliance warnings<!--/source--> |
| `process_violations` | `object` | <!--source:api-specifications-->Compliance process violations<!--/source--> |

##### Other responses

`400``401``403``404`

`PUT` `/compliance_metrics`

<!--source:api-specifications-->

#### Set Compliance Metrics Generation
<!--/source-->

`put-compliance-metrics`

<!--source:api-specifications-->
Set compliance metrics generation
<!--/source-->

<!--source:api-specifications-->
Set compliance metrics generation enables or disables the generation of compliance metrics sent to the health API.

<!--/source-->

##### Request

<!--source:api-specifications-->
Disabling reportEnabling report
<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "compliance_metrics_enabled": "false"
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy
```
{
 "compliance_metrics_enabled": "true"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "Sending compliance metrics is enabled."
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `compliance_metrics_enabled`required | `string` | <!--source:api-specifications-->Compliance metrics generation status<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `message` | `string` | <!--source:api-specifications-->Response status<!--/source--> |

##### Other responses

`400``401``403``404`

<!--source:api-specifications-->

### Identity
<!--/source-->

`GET` `/configurations`

<!--source:api-specifications-->

#### Retrieve configuration data
<!--/source-->

`get-configuration-data`

<!--source:api-specifications-->
Retrieve configuration data retrieves data to configure an identity provider

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "acs_url": "https://staircase.com/saml2/idpresponse",
 "identity_id": "urn:amazon:cognito:sp:us-east-1_bAcc5ljlp",
 "login_url": "https://staircase.com/login?client_id=1236&response_type=token&scope=email+openid&redirect_uri=https://staircase.com/callback"
}
```

<!--/source-->

##### Response `200``application/json`

<!--source:api-specifications-->
3 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `acs_url` | `string` | <!--source:api-specifications-->ACS URL<!--/source--> |
| `identity_id` | `string` | <!--source:api-specifications-->Identity id<!--/source--> |
| `login_url` | `string` | <!--source:api-specifications-->Login URL<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/identity_providers`

<!--source:api-specifications-->

#### Set identity provider
<!--/source-->

`set-identity-provider`

<!--source:api-specifications-->
Set identity provider Sets identity data using provider metadata**

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "metadata": "<data>Metadata</data>"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "SUCCEEDED"
}
```

<!--/source-->

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `metadata`required | `string` | <!--source:api-specifications-->Provider Metadata<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `status` | `string` | <!--source:api-specifications-->Status process<!--/source--> |

##### Other responses

`400``401``403``404`

`DELETE` `/identity_providers`

<!--source:api-specifications-->

#### Remove identity provider
<!--/source-->

`remove-identity-provider`

<!--source:api-specifications-->
Remove identity provider deletes identity provider settings

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "SUCCEEDED"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `Authorization` required | `string` header | `123` | <!--source:api-specifications-->Authorization Token<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `status` | `string` | <!--source:api-specifications-->Status process<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/users_access`

<!--source:api-specifications-->

#### Set user access
<!--/source-->

`set-user-access`

<!--source:api-specifications-->
Set user access Sets temporary access to specific environments**

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "email": "example@staircase.co",
 "expiration": 1441,
 "environment_domain": "example.com"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "SUCCEEDED"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `Authorization` required | `string` header | `123` | <!--source:api-specifications-->Authorization Token<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
3 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `email`required | `string` | <!--source:api-specifications-->User email<!--/source--> |
| `expiration` | `integer` | <!--source:api-specifications-->Expiration minutes<!--/source--> |
| `environment_domain` | `string` | <!--source:api-specifications-->Environment domain<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `status` | `string` | <!--source:api-specifications-->Status process<!--/source--> |

##### Other responses

`400``401``403``404`

<!--source:api-specifications-->

### SOC2
<!--/source-->

`POST` `/soc2/offboarding`

<!--source:api-specifications-->

#### Create Offboarding Data
<!--/source-->

`new-soc2-offboarding-data`

<!--source:api-specifications-->
Create offboarding data
<!--/source-->

<!--source:api-specifications-->
Comply looks into controls required for SOC2 compliance. One of these controls is around on-boarding and off-boarding. As part of this control, there must be tasks for new employees to onboard and get access to different systems such as GitHub, G Suite. Comply integrates with Rippling HR tool and Asana task management tool to retrieve the list of employees and to make sure that there is an offboarding task for them. This endpoint can be used by auditors to make sure that Staircase is following required SOC2 controls.

Comply returns an offboarding_data_id in the response body. To retrieve the results of the security validation, call Retrieve offboarding Status with the offboarding_data_id.

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "date_from": "2021-12-01",
 "admin_name": "Test Name"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "offboarding_data_id": "9dff4dc3-g700-4fc8-a51a-56d91d7ed7df"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `asana_token` required | `string` header | `1/1199400791141010:f1d4b85a291da54a88e14813a91d4b97` | <!--source:api-specifications-->Authorization Asana Token<!--/source--> |
| `rippling_token` required | `string` header | `byqVc9P6Woq0gUI01OMovA3o1wzymReZt3rBvwJTHpzaPwhKzW1fU4zzHkPcC3fe` | <!--source:api-specifications-->Authorization rippling Token<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `date_from`required | `string` | <!--source:api-specifications-->Date From.<!--/source--> |
| `admin_name` | `string` | <!--source:api-specifications-->User admin name from asana<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `offboarding_data_id` | `string` | <!--source:api-specifications-->Offboarding data id, used for get offboarding data<!--/source--> |

##### Other responses

`400``401``403``404`

`GET` `/soc2/offboarding/{offboarding_data_id}`

<!--source:api-specifications-->

#### Retrieve Offboarding Data
<!--/source-->

`get-soc2-offboarding-data`

<!--source:api-specifications-->
Get offboarding data
<!--/source-->

<!--source:api-specifications-->
Retrieve offboarding data retrieves the results of SOC2 offboarding process for a given offboarding_data_id.

<!--/source-->

##### Response

<!--source:api-specifications-->
200 Succeeded response200 Failed response
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "COMPLIANT",
 "offboarding_data_id": "91ae0517-c3b9-4709-9f4c-55cb7ac231cd",
 "offboarding_process": {
 "offboarding_tasks": [
 {
 "employee_name": "Employee Name",
 "asana_task": "https://app.asana.com/0/252455/252455588"
 }
 ],
 "missing_tasks": []
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "FAILED",
 "offboarding_data_id": "91ae0517-c3b9-4709-9f4c-55cb7ac231cd",
 "offboarding_process": [],
 "errors": [
 {
 "message": "rippling_token not authorized"
 }
 ]
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `offboarding_data_id` required | `string` path | `9dff4dc3-f700-4fc8-a51a-56d91d7ed7dg` | <!--source:api-specifications-->Offboarding data id<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
4 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `offboarding_data_id` | `string` | <!--source:api-specifications-->Offboarding data id<!--/source--> |
| `errors` | `object` | <!--source:api-specifications-->Errors<!--/source--> |
| `status` | `string` | <!--source:api-specifications-->Status of compliance<!--/source-->`COMPLIANT``FAILED``FAULT``IN_PROGRESS``NON_COMPLIANT``STOPPED``SUCCEEDED``TIMED_OUT` |
| `offboarding_process` | `object` | <!--source:api-specifications-->Offboarding process data<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/soc2/onboarding`

<!--source:api-specifications-->

#### Create Onboarding Data
<!--/source-->

`new-soc2-onboarding-data`

<!--source:api-specifications-->
Create onboarding data
<!--/source-->

<!--source:api-specifications-->
Comply looks into controls required for SOC2 compliance. One of these controls is around on-boarding and off-boarding. As part of this control, there must be tasks for new employees to onboard and get access to different systems such as GitHub, G Suite. Comply integrates with Rippling HR tool and Asana task management tool to retrieve the list of employees and to make sure that there is an onboarding task for them. This endpoint can be used by auditors to make sure that Staircase is following required SOC2 controls.

Comply returns an onboarding_data_id in the response body. To retrieve the results of the security validation, call Retrieve Onboarding Status with the onboarding_data_id.

<!--/source-->

##### Request

<!--source:api-specifications-->
application/json Copy
```
{
 "date_from": "2021-12-01"
}
```

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "onboarding_data_id": "9dfg4dc3-f700-4fc8-a51a-56d91d7ed7df"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `asana_token` required | `string` header | `1/1199400791141010:f1d4b85a291da54a88e14813a91d4b97` | <!--source:api-specifications-->Authorization Asana Token<!--/source--> |
| `rippling_token` required | `string` header | `byqVc9P6Woq0gUI01OMovA3o1wzymReZt3rBvwJTHpzaPwhKzW1fU4zzHkPcC3fe` | <!--source:api-specifications-->Authorization rippling Token<!--/source--> |

##### Request body`application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `date_from`required | `string` | <!--source:api-specifications-->Date From.<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `onboarding_data_id` | `string` | <!--source:api-specifications-->Onboarding data id, used for get onboarding data<!--/source--> |

##### Other responses

`400``401``403``404`

`GET` `/soc2/onboarding/{onboarding_data_id}`

<!--source:api-specifications-->

#### Retrieve Onboarding Data
<!--/source-->

`get-soc2-onboarding-data`

<!--source:api-specifications-->
Get onboarding data
<!--/source-->

<!--source:api-specifications-->
Retrieve onboarding data retrieves the results of SOC2 onboarding process for a given onboarding_data_id.

<!--/source-->

##### Response

<!--source:api-specifications-->
200 Succeeded response200 Failed response
<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "COMPLIANT",
 "onboarding_data_id": "91ae0517-c3b9-4709-9f4c-55cb7ac231cd",
 "onboarding_process": {
 "onboarding_tasks": [
 {
 "employee_name": "Employee Name",
 "asana_task": "https://app.asana.com/0/252455/252455588"
 }
 ],
 "missing_tasks": []
 }
}
```

<!--/source-->

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "status": "FAILED",
 "onboarding_data_id": "91ae0517-c3b9-4709-9f4c-55cb7ac231cd",
 "onboarding_process": [],
 "errors": [
 {
 "message": "rippling_token not authorized"
 }
 ]
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `onboarding_data_id` required | `string` path | `9dff4dc3-g700-4fc8-a51a-56d91d7ed7df` | <!--source:api-specifications-->Onboarding data id<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
4 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `onboarding_data_id` | `string` | <!--source:api-specifications-->Onboarding data id<!--/source--> |
| `errors` | `object` | <!--source:api-specifications-->Errors<!--/source--> |
| `status` | `string` | <!--source:api-specifications-->Status of compliance<!--/source-->`COMPLIANT``FAILED``FAULT``IN_PROGRESS``NON_COMPLIANT``STOPPED``SUCCEEDED``TIMED_OUT` |
| `onboarding_process` | `object` | <!--source:api-specifications-->Onboarding process data<!--/source--> |

##### Other responses

`400``401``403``404`

<!--source:api-specifications-->

### Machine to Machine
<!--/source-->

`DELETE` `/app_client/{product_name}`

<!--source:api-specifications-->

#### Delete app client
<!--/source-->

`delete-app-client`

<!--source:api-specifications-->
Delete app client Delete app client for product, To be able to use this API you must have "admin" or "product_engineer" profile

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "message": "SUCCEEDED"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `product_name` required | `string` path | `Test` | <!--source:api-specifications-->Product Name<!--/source--> |
| `Authorization` required | `string` header | `123` | <!--source:api-specifications-->Authorization Token<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
1 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `status` | `string` | <!--source:api-specifications-->Status process<!--/source--> |

##### Other responses

`400``401``403``404`

`GET` `/app_client/{product_name}`

<!--source:api-specifications-->

#### Get app client
<!--/source-->

`get-app-client`

<!--source:api-specifications-->
Get app client Get app client for product, To be able to use this API you must have "admin" or "product_engineer" profile

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "client_id": "client-id",
 "client_secret": "<redacted>"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `product_name` required | `string` path | `Test` | <!--source:api-specifications-->Product Name<!--/source--> |
| `Authorization` required | `string` header | `123` | <!--source:api-specifications-->Authorization Token<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `client_id` | `string` | <!--source:api-specifications-->Client id<!--/source--> |
| `client_secret` | `string` | <!--source:api-specifications-->Client secret<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/app_client/{product_name}`

<!--source:api-specifications-->

#### Create app client
<!--/source-->

`create-app-client`

<!--source:api-specifications-->
Create app client Create new app client for product**, To be able to use this API you must have "admin" or "product_engineer" profile

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "client_id": "client-id",
 "client_secret": "<redacted>"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
2
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `product_name` required | `string` path | `Test` | <!--source:api-specifications-->Product Name<!--/source--> |
| `Authorization` required | `string` header | `123` | <!--source:api-specifications-->Authorization Token<!--/source--> |

##### Response `200``application/json`

<!--source:api-specifications-->
2 fields
<!--/source-->
<!--source:api-specifications-->
200 response
<!--/source-->

| Field | Type | Description |
| --- | --- | --- |
| `client_id` | `string` | <!--source:api-specifications-->Client id<!--/source--> |
| `client_secret` | `string` | <!--source:api-specifications-->Client secret<!--/source--> |

##### Other responses

`400``401``403``404`

`POST` `/oauth/validate`

<!--source:api-specifications-->

#### Validate access token
<!--/source-->

`validate-access-token`

<!--source:api-specifications-->
Validate access token Validate access token**

<!--/source-->

##### Response

<!--source:api-specifications-->
application/json Copy 200 response

```
{
 "sub": "08b02444-76cf-4644-a058-3e5b623f2620",
 "identities": "[{\"userId\":\"user@domain.com\",\"providerName\":\"Staircase\",\"providerType\":\"SAML\",\"issuer\":\"https://accounts.google.com/o/saml2?idpid=XXXX22222\",\"primary\":true,\"dateCreated\":1631219658425}]",
 "email_verified": "false",
 "profile": "developer",
 "email": "user@domain.com",
 "custom:environments_access": "[]",
 "username": "Staircase_user@domain.com"
}
```

<!--/source-->

##### Parameters

<!--source:api-specifications-->
1
<!--/source-->

| Parameter | Type | Example | Description |
| --- | --- | --- | --- |
| `Authorization` required | `string` header | `<redacted>` | <!--source:api-specifications-->Access Token<!--/source--> |

##### Other responses

`200``400``401``403``404`

## Providers

- MeridianLink

## Errors

`400``401``403``404``422`

## More in Shipping

- Previous product: Code
- Next product: Deploy
