# Source Controlling Data Products

You may want to maintain your data product definitions in source control and then push versions of those definitions to the Request app.

For example, consider the following data product definition which would be stored in a JSON file type in source control. It is also possible to store an array of data products in a single JSON file and pass that as your payload as well.

```
{
    "id": "4c8f6d82-e4c6-4478-92eb-d9342500f006",
    "name": "API Example",
    "description": "Data product created via the API",
    "metadata": {
        "subjectMatterExpert": {
            "id": "99aeadb5-352e-4872-9983-e628d399c36e"
        }
    },
    "domains": ["2ad33803-0a74-4ec6-8a1f-77693fb5f5fb"],
    "dataSources": [
        { "sourceId": "1" },
        { "sourceId": "6" },
        { "sourceId": "2" }
    ],
    "approvalPolicyId": "9c16db23-eecd-4f58-a72b-151ebea3b87e"
}
```

Notice the `id` key: it is possible to provide your own `id` on create as long as it meets standard UUID format. This `id` is how Immuta knows which data product you are editing if you send a new version of the data product definition to Immuta. The other objects referenced through UUIDs, such as the `approvalPolicyId`, can also be source controlled in the same manner, if desired.

It's important to understand that there are different API endpoints for create vs update of data products, but the payload is the same.

It is also possible to create a Terraform provider from the [Immuta OpenAPI specification](/saas/developer-guides/api-intro/marketplace-api.md#download-the-request-app-openapi-yaml).


---

# 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://documentation.immuta.com/saas/developer-guides/api-intro/marketplace-api/source-controlling-data-products.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.
