# Zephyr Programs

We have already covered what a Zephyr program is, now let's try to get a clearer picture of it.

## Setting up the project

Each Mercury account can initialize and deploy a Zephyr program by following the steps on the Quickstart or the "Set up and manage project" section. With a simple Zephyr SDK command, you can create a Rust project that includes a `Zephyr.toml` file, where you can define the structure of the database tables that your program will access.&#x20;

## Write, Deploy, and Monitor your Program

Once you're all set, you can start writing your logic in the program. When you're finished the program will be deployed and:

* Run for every new ledger close while performing the specified logic.
* Be called through a web request to execute the predefined logic, if you're using it as a custom API.
* Do both.

It's possible to control the program's execution from Mercury's app, where you can start, pause, and see its logs. Now, let's explore what it means to create your own logic in the program and the various types of actions that can be executed.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mercurydata.app/zephyr-full-customization/general-concepts/zephyr-programs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
