> For the complete documentation index, see [llms.txt](https://docs.bullcredtech.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bullcredtech.com/api-reference/apis-en/proposal-flow/get-proposals-contract-status.md).

# 7.1. Check contract status (polling)

Checks the current status of a proposal's contract and digital signature. It is also the **polling endpoint** after triggering the [`POST /contract`](/api-reference/apis-en/proposal-flow/post-proposals-contract.md) (hybrid or async modes).

Two equivalent routes (same response shape):

| Endpoint                                      | Notes                                              |
| --------------------------------------------- | -------------------------------------------------- |
| **`GET /proposals/{proposalId}/contract`**    | Preferred (symmetric with `GET /credit-analysis`). |
| `GET /proposals/{proposalId}/contract/status` | Alias kept for compatibility.                      |

The response has three possible behaviors:

* **`200 OK`** — contract generated; payload contains current status, proposal data, borrower, selected offer, etc. Same shape as the return of the `POST /contract` synchronous.
* **`202 Accepted`** — contract still being generated (proposal in `CONTRACT_GENERATION_IN_PROGRESS`). Client should poll.
* **`409 Conflict`** — proposal in terminal status (`EXPIRED`, `CANCELED`, `REJECTED`, `ERROR`, `CANCELLED_BY_USER`). Client should open a new proposal.

{% hint style="info" %}
**When to use polling**

Use this endpoint whenever you triggered a `POST /contract` in async mode (explicit, legacy or hybrid with timeout). Recommended interval: 2 seconds; stop after \~3 minutes.
{% endhint %}

## URL Parameters

| Parameter    | Type          | Description |
| ------------ | ------------- | ----------- |
| `proposalId` | string (UUID) | Proposal ID |

## Response — Generation in progress (202 Accepted)

Returned when the proposal is still in `CONTRACT_GENERATION_IN_PROGRESS` (typically after receiving `202` from the `POST /contract`).

```json
{
  "async_processing": true,
  "message": "Contract generation in progress — try again in a few seconds.",
  "proposal_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "CONTRACT_GENERATION_IN_PROGRESS",
  "processing_started_at": "2026-05-11T19:00:00.000Z",
  "status_url": "/proposals/a1b2c3d4-e5f6-7890-abcd-ef1234567890/contract/status"
}
```

## Response — Proposal in terminal status (409 Conflict)

```json
{
  "code": "TERMINAL_PROPOSAL_STATUS",
  "message": "It is not possible to query the contract of a proposal in EXPIRED status. Start a new proposal.",
  "details": { "current_status": "EXPIRED" }
}
```

## Success Response (200 OK)

Returns updated information about:

* Proposal status
* Digital signature status
* Contract status
* Disbursement information (if completed)

```json
{
  "proposal_id": "99afc6ce-4720-4746-9cf6-0a23e85cdf75",
  "proposal_status": "AWAITING_SIGNATURE",
  "contract_id": "9f195264-b1f5-415f-97ea-8e7a51e04238",
  "contract_status": "CONTRACT_GENERATED",
  "digital_signature": {
    "signature_id": "ba0ded34-daf1-4433-8320-4e7e9fd19503",
    "status": "PENDING",
    "user_redirect_url": "https://cadastro.unico.app/process/1b8fc7d3-4012-4fb4-84cd-c0025d9b13d0",
    "expires_at": "2025-10-15T21:00:00.000Z"
  }
}
```

### Response Fields

| Field                                 | Type          | Description             |
| ------------------------------------- | ------------- | ----------------------- |
| `proposal_id`                         | string (UUID) | Proposal ID             |
| `proposal_status`                     | string        | Current proposal status |
| `contract_id`                         | string (UUID) | Contract ID             |
| `contract_status`                     | string        | Contract status         |
| `digital_signature`                   | object        | Digital signature data  |
| `digital_signature.status`            | string        | Signature status        |
| `digital_signature.user_redirect_url` | string        | Signing URL             |
| `digital_signature.expires_at`        | string        | Expiration deadline     |

### Possible Signature Statuses

| Status        | Description                                       |
| ------------- | ------------------------------------------------- |
| `PENDING`     | Waiting for customer signature                    |
| `IN_PROGRESS` | Customer started the process in UNICO             |
| `SIGNED`      | Contract signed successfully                      |
| `EXPIRED`     | Signature deadline expired                        |
| `REJECTED`    | Signature rejected (biometric validation failure) |

## Possible Errors

| Code | Message                        |
| ---- | ------------------------------ |
| 404  | Proposal or contract not found |

## Notes

* Use this endpoint to check whether the customer has already signed the contract
* The `user_redirect_url` can be used to redirect the customer again if they have not completed the signature
* After `SIGNED`, disbursement occurs automatically
* We recommend using [webhooks](/api-reference/apis-en/guias/webhooks.md) to track status changes in real time


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bullcredtech.com/api-reference/apis-en/proposal-flow/get-proposals-contract-status.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
