> For the complete documentation index, see [llms.txt](https://docs.openiam.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.openiam.com/developer-guide/choose-what-youre-building.md).

# Choose what you are building

Match what you are trying to build to the pages that build it, in order.

Find what you are doing, then follow the pages in the order listed. The pages are shared between routes — the procedures are not duplicated.

## Groovy scripting

| You want to                                                 | Pages, in order                                                                                                                                                                                                                                                                                           |
| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Control what an attribute contains in a target system**   | [Set up your environment](/developer-guide/set-up-your-environment.md) → [How scripting works](/developer-guide/how-scripting-works.md) → [Policy map scripts](/developer-guide/policy-map-scripts.md)                                                                                                    |
| **Map an inbound feed onto OpenIAM users, groups or roles** | [Set up your environment](/developer-guide/set-up-your-environment.md) → [How scripting works](/developer-guide/how-scripting-works.md) → [Transformation scripts](/developer-guide/transformation-scripts.md) → [Validation and attribute scripts](/developer-guide/validation-and-attribute-scripts.md) |
| **Reject bad rows before they are processed**               | [Validation and attribute scripts](/developer-guide/validation-and-attribute-scripts.md)                                                                                                                                                                                                                  |
| **Act on what reconciliation finds**                        | [Set up your environment](/developer-guide/set-up-your-environment.md) → [How scripting works](/developer-guide/how-scripting-works.md) → [Reconciliation scripts](/developer-guide/reconciliation-scripts.md)                                                                                            |
| **Run something on a schedule**                             | [Set up your environment](/developer-guide/set-up-your-environment.md) → [Batch scripts](/developer-guide/batch-scripts.md)                                                                                                                                                                               |
| **Build the identifier an account carries in a target**     | [Validation and attribute scripts](/developer-guide/validation-and-attribute-scripts.md) → [Policy map scripts](/developer-guide/policy-map-scripts.md)                                                                                                                                                   |

**Read** [***How scripting works***](/developer-guide/how-scripting-works.md) **before any tutorial.** The script types differ in what they extend, what they receive and when they run, and most mistakes come from applying one type's habits to another.

## The REST API

| You want to                                   | Pages, in order                                                                                                 |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Call the API for the first time**           | [API fundamentals](/developer-guide/fundamentals.md) → [Your first calls](/developer-guide/your-first-calls.md) |
| **Create, update or deprovision a user**      | [Managing users](/developer-guide/user-lifecycle.md)                                                            |
| **Handle tokens — refresh, revoke, sign out** | [Tokens](/developer-guide/tokens.md)                                                                            |
| **Find a specific endpoint**                  | [API fundamentals](/developer-guide/fundamentals.md), step 4                                                    |
| **Integrate from Python or Java**             | [API fundamentals](/developer-guide/fundamentals.md) → [Your first calls](/developer-guide/your-first-calls.md) |
| **Understand why a call was refused**         | [API fundamentals](/developer-guide/fundamentals.md) → [Common errors](/developer-guide/common-errors.md)       |

## Which script type do I need?

If you are not sure which extension point applies:

| The behaviour you want to change                        | Script type        |
| ------------------------------------------------------- | ------------------ |
| What value lands in a target system's attribute         | **Policy map**     |
| Whether an attribute is written to a target at all      | **Policy map**     |
| How a source row becomes an OpenIAM user, group or role | **Transformation** |
| Whether a source row is processed at all                | **Validation**     |
| Which attributes are read from a source                 | **Attributes**     |
| What happens when OpenIAM and a target disagree         | **Reconciliation** |
| Something that runs on a schedule with no input         | **Batch**          |

**Policy map is the type most projects write most of.** Across the scripts that ship with the platform, it accounts for more than five times the next most common type.

## Related

* [*How scripting works*](/developer-guide/how-scripting-works.md)
* [*API fundamentals*](/developer-guide/fundamentals.md)
* [*Managing users*](/developer-guide/user-lifecycle.md)
* [*Tokens*](/developer-guide/tokens.md)
* The [Administration Guide](/administration-guide/admin.md) — configuring the things these scripts hang off

*Applies to OpenIAM 2026.8.1.*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.openiam.com/developer-guide/choose-what-youre-building.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
