# Events_UndoEvent_Account

`POST /v1/accounts/{account}/events/{event}:undo`

Undoes an event. The service that wrote it does the undo, in its own
transaction, and records it as a new event whose `undoes` is this
event's id; the event itself never changes. Each event is undone at most
once.

FAILED_PRECONDITION, with the reason in the message, when the event is
not `undoable` (its kind can't be undone, or this one was written so),
when it was undone already, or when what it changed has changed since
(an episode ruled or edited again, an issue edited or dismissed). ABORTED
when the episodes it edited move while the undo runs: send it again.
Needs `spaces:read` and `datasets:write` on the event's workspace (only
qds events undo today); an event of the organization itself needs
`spaces:read` and `spaces:members` on the organization. An API key needs
`data:write`.

- Base URL: `https://junction-api.qualiastudios.dev`
- Authentication: an API key in the `X-API-Key` header

## Parameters

- `account` (path, string, required): The account id.
- `event` (path, string, required): The event id.

## Request body

Required: `application/json` `qualia.v1.UndoEventRequest`

## Responses

- `200` OK: `application/json` `qualia.v1.UndoEventResponse`
- `default` Default error response: `application/json` `google.rpc.Status`

## Schemas

```yaml
qualia.v1.UndoEventRequest:
  required:
    - name
  type: object
  properties:
    name:
      type: string
      description: |-
        The event to undo, by its `name`:
        accounts/{account}/workspaces/{workspace}/events/{event} for a
        workspace's, accounts/{account}/events/{event} for the organization's
        own. A workspace's event named by the organization path is refused.
  description: Request for Events.UndoEvent.
qualia.v1.UndoEventResponse:
  type: object
  properties:
    event:
      type: string
      description: |-
        The event that records the undo, named under the same parent as the
        request; its `undoes` is the undone event's id. It reaches the record,
        and GetEvent, ListEvents and the live stream, when the relay copies it,
        normally within a second.
  description: Response for Events.UndoEvent.
google.rpc.Status:
  oneOf:
    - $ref: "#/components/schemas/ApiError"
    - $ref: "#/components/schemas/GatewayError"
  description: "The body of a failed call: one of the two shapes below."
ApiError:
  title: API error
  type: object
  required:
    - code
    - message
    - retryable
    - details
  properties:
    code:
      type: string
      description: The gRPC code name in upper case, e.g. `NOT_FOUND`.
    message:
      type: string
    retryable:
      type: boolean
      description: Whether the same call may succeed if retried.
    details:
      type: array
      items:
        type: object
      description: "Empty, except when a dataset copy or move is refused: then one `google.rpc.ErrorInfo` with the refusal's `reason` code, its `domain` and, in `metadata`, the datasets it names."
  description: A refusal from the API itself.
GatewayError:
  title: Gateway error
  type: object
  required:
    - detail
  properties:
    detail:
      type: string
      description: What went wrong.
  description: A refusal from the gateway before the call reaches the API, for example `401` bad or missing API key, `403` key lacks the scope or environment closed, `413` body too large.
```
