---
title: "Delete a recipe"
method: DELETE
path: "/api/v3.1/automated-recipes/{recipe_id}/"
tags: ["Automated Recipes"]
---

# Delete a recipe

`DELETE /api/v3.1/automated-recipes/{recipe_id}/`

## Request

- Base URL: `https://embedded.improvado.io`
- URL: `https://embedded.improvado.io/api/v3.1/automated-recipes/{recipe_id}/`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `dts_session_id`
- TypeScript: <https://skmtc.dev/improvado/apis/improvado-embedded-api-v3/docs/api/v3.1/automated-recipes/:recipe_id/delete.ts> (a function with typed inputs; its response is checked against the schema)

Deletes a recipe. This is a hard delete and it cannot be undone: the output tables the recipe produced are dropped, its configuration is removed, and the intermediate recipes it was built on go with it. The cascade follows the recipes this one reads from, not the ones that read it: a recipe built on top of this one stays in place and breaks.

**The extractions created for the recipe are not deleted.** They keep running on their schedule and the data they have already collected stays where it is, so a recipe deployed from the same template in the same workspace later sees the data of all those accounts, whatever set of accounts its own configuration names. Deleting a recipe is therefore not a way to narrow what a result contains; if the data of an account has to be taken out, contact support.

The template slot and the output table name are free again as soon as the 204 arrives, but the registration of the table on the platform side is removed asynchronously. Before deploying the same template here again, wait until the recipe is gone from `GET /api/v3.1/automated-recipes/`; a create sent straight after the 204 can be given the `datatable_id` of the old table, which is then dropped.

Answers 204 with an empty body. If the recipe itself could not be deleted, the answer is 500 `delete_incomplete`; an intermediate recipe that could not be deleted is logged on our side and does not change the answer.

## Path parameters

- `recipe_id` string, required

## Response `204`

The recipe was deleted. The response has no body.

## Other responses

- `400`: The request could not be processed. `bad_request` is the catch-all code for a 4xx that has no code of its own, so the same envelope can arrive with another 4xx status, for example 415.
- `401`: The bearer token is missing, invalid or expired
- `403`: The caller is authenticated but this operation is not available to them
- `404`: No such recipe in this workspace. The same answer covers a recipe of another workspace or agency, a recipe that was already deleted and a recipe that is not managed through this API.
- `405`: The HTTP method is not supported on this path
- `409`: The tables of the recipe could not be dropped, because the workspace has no destination this API can work with. Read the recipe again to see whether it is still there.
- `500`: The recipe itself could not be deleted, or something else failed on our side. Read the recipe again to see whether it is still there.
- `503`: Temporarily unavailable. The response carries the header `Retry-After: 30`, so wait 30 seconds, re-read the recipe to see whether it is still there, and only then repeat the request.

---

[API](https://skmtc.dev/improvado/apis/improvado-embedded-api-v3.md) - [All operations](https://skmtc.dev/improvado/apis/improvado-embedded-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/improvado/apis/improvado-embedded-api-v3/revisions/a881099bd6c4?raw)
