# Check updates

You can check the status of intent proposals at different stages of the process.

## Check the request

All intent submissions generate a request object associated with a `requestId`. The `requestId` is either created by the submitter during intent submission (recommended) or generated by Ripple Custody. You can use it to follow the progress of a user request and identify a possible failure.

To check the request, call the [Get request state](/products/custody/v1.26/api/reference/openapi/requests/getrequeststate) operation, including the relevant `requestId`.

This returns a response similar to the following:


```json
{
    "id": "276fe27c-1ae4-4e93-a811-3f3d3e49cabe",
    "requester": {
        "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
        "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
    },
    "status": "Succeeded",
    "history": [
        {
            "source": "Notary",
            "status": "Succeeded",
            "hint": "Processing succeeded",
            "createdAt": "2021-07-19T13:36:14.834Z"
        },
        {
            "source": "Gateway",
            "status": "Processing",
            "hint": "None",
            "createdAt": "2021-07-19T13:36:11.053Z"
        }
    ],
    "lastModifiedAt": "2021-07-19T13:36:14.834Z"
}
```

The possible `status` values are:

- `Processing`: The request for creating the intent was successfully received.
- `Succeeded`: The request was successfully satisfied and the intent was created.
- `Failed`: The request failed, for the reason described in the `failure` field.


A `history` field also shows the different steps that led to the intent creation.

You can also query the following:

- [Get all user requests state in domain](/products/custody/v1.26/api/reference/openapi/requests/getalluserrequestsstateindomain): The full list of requests in the domain.
- [Get all user requests state](/products/custody/v1.26/api/reference/openapi/requests/getalluserrequestsstate): A list of requests for the current user.


## Check the intent

Once the request status is `Succeeded`, you can check the progress of the intent through the approval workflow.

To check the intent, call the [Get intent details](/products/custody/v1.26/api/reference/openapi/intents/getintent) operation with the `intentId` specified at creation time.

This returns a response similar to the following:


```json
{
    "data": {
        "id": "75ff1be5-cca9-4481-a7af-23bb33ff0ed8",
        "details": {
            "payload": {
                "data": "some data",
                "type": "v0_NotarizeData"
            },
            "expiryAt": "2021-10-21T17:02:24.331Z",
            "author": {
                "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
                "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
            },
            "targetDomainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
            "metadata": {
                "description": null,
                "createdAt": "2021-08-27T13:50:48.450Z",
                "customProperties": {}
            },
            "proposalSignature": "MEYCIQDsHgd41Ix/O0yJ1y+AOT9V7TMOvhhPNJ2WSyQi2CNiXwIhAKfEE3T+ukbIoNGAutJfAiVZ0F5RFJG94QrLMy1pSEZa"
        },
        "state": {
            "status": "Open",
            "error": null,
            "progressPerPolicy": [
                {
                    "stepProgress": [
                        {
                            "state": "Open",
                            "decisions": [
                                {
                                    "author": {
                                        "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
                                        "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
                                    },
                                    "authorRoles": [
                                        "admin"
                                    ],
                                    "seenBySystemAt": "2021-08-27T13:50:48.450Z",
                                    "expiryAt": "2021-08-27T21:50:47.516Z",
                                    "decision": "Approve",
                                    "rejectionReason": null,
                                    "rawRequest": "{\"author\":{\"domainId\":\"5cd224fe-193e-8bce-c94c-c6c05245e2d1\",\"id\":\"6ac20654-450e-29e4-65e2-1bdecb7db7c4\"},\"customProperties\":{},\"\":\"2021-08-27T21:50:47.516Z\",\"id\":\"75ff1be5-cca9-4481-a7af-23bb33ff0ed8\",\"payload\":{\"data\":\"some data\",\"type\":\"v0_NotarizeData\"},\"targetDomainId\":\"5cd224fe-193e-8bce-c94c-c6c05245e2d1\",\"type\":\"Propose\"}",
                                    "signature": "<SIGNATURE>"
                                }
                            ]
                        }
                    ],
                    "policyReference": {
                        "id": "39ab337e-3347-4c4d-8bc7-dd518535ee61",
                        "revision": 1,
                        "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
                    }
                }
            ]
        }
    },
    "signature": "<SIGNATURE>",
    "signingKey": "<SIGNINGKEY>"
}
```

The `data.state` block provides the following information on the progress of the intent:

- The current status of the intent.
- The policy selected to govern the approval.
- A list of the approvals or rejections received.


The new entity proposed in the intent is created when `data.state.status` is `Executed`.

In the example, the `status` is shown as `Open`, which means the intent is not yet executed, as further approvals are to be collected. `progressPerPolicy.stepProgress` displays information on the current step of the approval workflow. In the example, one signature from an admin user is documented, but the step is also `Open`, meaning that further approvals are necessary to close this step.

To list all the users who have the appropriate role to approve (or reject) any given intent, run the [Get remaining users](/products/custody/v1.26/api/reference/openapi/intents/getremainingusers) operation.

This returns a response similar to the following


```json
[
    {
        "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
        "users": [
            "0c723b1e-5d44-44b6-a61c-1dc97efaedf1",
            "fdf4ae91-c435-48d2-a3d2-b849d972744d",
            "da7b5a8a-f6b9-11eb-8d3f-dcfb48cfb3cb",
            "490e8791-1652-4e11-a6d1-efcdbc3aa9c3"
        ]
    }
]
```

The call lists all the users whose role corresponds to one of the roles required by the approval workflow, minus the users who already approved. The result returns information about the current approval step, so if the approval workflow is made up of multiple steps, you need to repeat this call for each new step.

To obtain information on how many steps exist, you can query the policy using the [Get policy details](/products/custody/v1.26/api/reference/openapi/policies/getpolicy) operation with the policy ID.

## Check the entity

When all other checks indicate the intent was processed successfully, the final check is to check the entity was created correctly.

For example, to check a user was created correctly, call the [Get user details](/products/custody/v1.26/api/reference/openapi/users/getuser) operation.

This returns a response similar to the following example:


```json
{
    "data": {
        "id": "fcedc2da-fa2c-4848-9583-90967c67a624",
        "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
        "alias": "trader_manager@ripple.com",
        "publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwVvSRmgF1T7TXFMTysz1dvc4i6V085hfvdeu3dABSOFxgZI6RiENly7UsbNZY4rDjZN6zD+qo6nMvcTJfkd/WA==",
        "roles": [
            "trader",
            "manager"
        ],
        "lock": "Unlocked",
        "metadata": {
            "description": "User with roles trader and manager",
            "revision": 3,
            "createdAt": "2024-01-11T05:27:50.822Z",
            "createdBy": {
                "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
                "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
            },
            "lastModifiedAt": "2024-01-11T05:28:48.960Z",
            "lastModifiedBy": {
                "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
                "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
            },
            "customProperties": {}
        }
    },
    "signature": "<SIGNATURE>",
    "signingKey": "<SIGNINGKEY>"
}
```

For entities whose creation involves a multi-step process, additional information is provided in the `additionalDetails` object, appended at the end of the entity, as in the following example:


```json
{
    "data": {
        "id": "3b6d578e-7396-495d-8392-61b7ede174b3",
        "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1",
        "alias": "btc-zero",
        "ledgerId": "bitcoin-testnet",
        "providerDetails": {
            "vaultId": "00000000-0000-0000-0000-000000000000",
            "keyStrategy": "VaultHard",
            "keyInformation": {
                "publicKey": {
                    "value": "MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE6JubkKkX60OrDR8Vb4TwdezcSXgSJlk4oE9mqKodkwiEiRM0s+xOU53KsnJRMJ0ORVUFgMgB2sC7gysYe6qDZQ==",
                    "chainCode": "WT5hfD4Yt7WeZxifVL24BDSlT1GoigF0fIriA4G+5ac=",
                    "type": "ExtendedPublicKey"
                },
                "derivationPath": "1'/2'",
                "type": "VaultDerived"
            },
            "type": "Vault"
        },
        "lock": "Unlocked",
        "metadata": {
            "description": "a bitcoin account for testing",
            "revision": 1,
            "createdAt": "2021-10-07T12:17:45.427Z",
            "createdBy": {
                "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
                "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
            },
            "lastModifiedAt": "2021-10-07T12:17:45.427Z",
            "lastModifiedBy": {
                "id": "6ac20654-450e-29e4-65e2-1bdecb7db7c4",
                "domainId": "5cd224fe-193e-8bce-c94c-c6c05245e2d1"
            },
            "customProperties": {
                "testnet_account": "true"
            }
        }
    },
    "signature": "<SIGNATURE>",
    "signingKey": "<SIGNINGKEY>",
    "additionalDetails": {
        "processing": {
            "status": "Completed"
        },
        "lastBalancesUpdateRequestedAt": "2021-10-07T12:46:27.131Z",
        "lastBalancesUpdateProcessedAt": "2021-10-07T12:46:27.169Z"
    }
}
```

The response includes the following details:

- `processing.status`: Progress of the entity creation through its different stages.
- `processing.hint`: For failed entity creation, details of the failure.


When you perform accounting transactions, Ripple Custody generates internal entities. When you create a transaction order or transfer order, you can find more information on the entity by checking the underlying transaction and transfer entities created for the transaction on the blockchain.

For more information, see the following sections:

- [Transaction initiation](/products/custody/v1.26/overview/blockchain/transactions/transaction-initiation)
- [View transactions](/products/custody/v1.26/api/accounting/transactions/view)