# GET /v1/routines/{routine_id}

> One routine.

In [Routines API](https://vestra.ai/developers/reference/api/routines.md): Jobs Bash runs on a schedule in plain words, or whenever your system calls.

Send `Authorization: Bearer vk_test_...` on every call.

One routine.

Your API key, scope `runtime` or `all`. On the card: [`routines`](https://vestra.ai/developers/routines.md). Over HTTP it is made from the contract: fill in each {…} and every value.

## Request

Path:

- `routine_id` (`string`, required): The routine's id (`rtn_...`).

## Answers 200

- `id` (`string`): The routine's id. Example: `rtn_8f2k`.
- `object` (`"routine"`): Always `routine`.
- `user_id` (`string | null`): Your id for the user whose Bash runs it; null for your company's own Bash.
- `conversation_id` (`string | null`): The conversation each run posts into, named or made when the routine was; null for a routine not made through the API.
- `name` (`string`): Its name.
- `ask` (`string`): What Bash is asked on every run.
- `kind` (`"schedule" | "trigger" | "app_event"`): `schedule`: it runs on its schedule. `trigger`: it runs when your system posts to `trigger_url`. `app_event`: an event in a connected app runs it.
- `schedule` (`object | null`): When it runs; null for one that runs on a call.
  - `every` (`string | null`): The plain words it was given; null for a cron.
  - `cron` (`string`): The schedule as cron, worked out from `every` when it was given in words.
  - `timezone` (`string`): The zone it runs in, an IANA name.
- `trigger` (`object | null`): For one that runs on a call, what it listens for; null for one on a schedule.
  - `filters` (`map of any | null`): What a payload must carry for it to run; null: any payload.
- `trigger_url` (`string | null`): For one that runs on a call: POST here, with your key and any JSON object, to run it. Null otherwise.
- `enabled` (`boolean`): false while it is paused.
- `status` (`"active" | "completed" | "failed"`): `active`: it runs as it should. `completed`: it has finished and will not run again. `failed`: it stopped on an error.
- `last_run_at` (`string | null`): When it last ran; null when it never has.
- `next_run_at` (`string | null`): When it runs next; null when paused, finished, or run on a call.
- `run_count` (`integer`): How many times it has run.
- `created_at` (`string`): When it was made, as an ISO 8601 date and time in UTC.
- `updated_at` (`string`): When it last changed, as an ISO 8601 date and time in UTC.

## Code

**TypeScript**

```ts
const routine = await vestra.routines.get('rtn_5kd');
```

**Python**

```python
routine = vestra.routines.get("rtn_5kd")
```

**CLI**

```bash
vestra routines get rtn_5kd
```

**HTTP**

```bash
curl "$VESTRA_BASE_URL/v1/routines/{routine_id}" \
  -H "Authorization: Bearer $VESTRA_API_KEY"
```

**MCP**: No sample in your language for this route, so here it is over HTTP.
