---
title: Appeals API
description: Create an appeal for a request.
group: reference-api
---
> ⚠️ **Warning:** **Alpha**
> DSAR is currently in alpha. APIs, package surfaces, configuration, and documentation may change as the project evolves.

## POST /requests/:id/appeals

Create an appeal for a request.

**Request body:**

* `message` (string, required): free-text appeal rationale
* `grounds` (string, optional)

Create requests only accept the client-supplied appeal fields. Server-managed
fields such as `id`, `status`, timestamps, and any decision metadata are
returned by list/read models instead of being supplied during creation.

**Response (202):**

```json
{
	"appealId": "appeal-123",
	"requestId": "req-123",
	"status": "appeal_submitted"
}
```

## GET /requests/:id/appeals

List appeals for a request.

**Response (200):**

```json
[
	{
		"id": "appeal-123",
		"message": "Please review the refusal.",
		"status": "pending",
		"createdAt": "2026-01-01T00:00:00.000Z"
	}
]
```

## POST /requests/:id/appeals/:appealId/decide

Decide on an appeal.

**Request body:**

* `decision` (string): "approve" | "deny" | "partial"
* `explanation` (string, optional)

**Response (202):**

```json
{
	"appealId": "appeal-123",
	"decision": "approve",
	"requestId": "req-123",
	"status": "appeal_decided"
}
```
