# Check whether an app's sign-in link can still be answered

> Page: https://docs.plotwork.dev/api/get-user-apps-request. Index of every page: https://docs.plotwork.dev/llms.txt

open (with the app, the scopes and where the code goes), used, expired or invalid.

`GET /user/apps/request`

## TL;DR

| Question | Answer |
|---|---|
| What does it do? | Check whether an app's sign-in link can still be answered. |
| What does it take? | `request` in the query string. |
| What does it return? | Status 200 with a body of type [`AppRequestState`](https://docs.plotwork.dev/api/schemas.md#apprequeststate). |
| What can go wrong? | `400` no request was sent; `401` not signed in; `429` too many requests; `503` sign in with Plotwork is not available on this server (oauth.unavailable). Every failure uses the one error envelope. |

## What it does

open (with the app, the scopes and where the code goes), used, expired or invalid. The approval checks again.

## Query parameters

| Field | Type | Required | Description |
|---|---|---|---|
| `request` | `string` | yes | The signed authorization request, exactly as the API put it in the consent page address. |

## Responses

| Status | Meaning | Body |
|---|---|---|
| 200 | What the link is now. | [`AppRequestState`](https://docs.plotwork.dev/api/schemas.md#apprequeststate) |
| 400 | No request was sent. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 401 | Not signed in. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 429 | Too many requests. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 503 | Sign in with Plotwork is not available on this server (oauth.unavailable). | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |

## Response body

A 200 answer has the type [`AppRequestState`](https://docs.plotwork.dev/api/schemas.md#apprequeststate).

| Field | Type | Required | Description |
|---|---|---|---|
| `state` | `"open" \| "used" \| "expired" \| "invalid"` | yes |  |
| `expiresIn` | `integer \| null` | yes | Seconds left for an open link. |
| `app` | `object \| null` | yes |  |
| `app.id` | `string` | yes | The app's id, which is its OAuth client_id. |
| `app.name` | `string` | yes | A claim, not a fact. |
| `app.homepage` | `string \| null` | yes |  |
| `app.organisation` | `object \| null` | yes | The organisation that registered the app, or null for a person. |
| `app.organisation.id` | `string` | yes |  |
| `app.organisation.slug` | `string` | yes |  |
| `app.organisation.name` | `string` | yes |  |
| `app.membersOnly` | `boolean` | yes |  |
| `scopes` | `array \| null` | yes |  |
| `redirectUri` | `string \| null` | yes | Where the app receives its code. Show its host. |

## See also

| Doc | Why |
|---|---|
| [API reference](https://docs.plotwork.dev/api/reference.md) | Every endpoint, and the error envelope |
| [Schemas](https://docs.plotwork.dev/api/schemas.md) | Every request and response type |
| [Tool reference](https://docs.plotwork.dev/mcp/tools.md) | The operations as callable tools |
