Explanations

About Custom Policies


What is a custom policy?

Policies are used to define values that can be consumed by different services. Ledger has built-in policies like access, labels or status, for these policies the values will be validated and consumed by the ledger. If you create a new schema that targets record policy you can create custom policies to store values which format won't be validated by the ledger's API Schema.

Data validation will still be performed based on the schema you define, see About Schemas for more details on how to create your schema.

POST /v2/policies

{
  ...,
  data: {
    handle: '...',
    schema: 'my-schema',
    values: [ ... ]
  }
}

These custom policies will exposed on the same endpoint as other policies, such as status or access. If you want to read only your policies, you can use a filter.

GET /v2/policies?data.schema=my-schema

Example use case

As policies with custom schemas can store data with defined structure in its values, they are useful for storing ledger-level configuration. For example, studio uses a custom navigation schema defined for policies to configure how the navigation menu will be rendered, this is how a navigation policy looks:

{
    handle: 'my-custom-navigation',
    schema: 'navigation',
    values: [
        {
            header: 'Movements',
            screen: 'intents',
        },
        {
            header: 'Connections',
            screen: 'bridges',   
        },
        {
            header: 'Security',
            items: [
                {
                    header: 'Members',
                    screen: 'members',
                },
                {
                    header: 'Security Policies',
                    screen: 'policies',
                    params: {
                        query: '?schema=access',
                    }
                },
                {
                    header: 'roles',
                    screen: 'circles',
                }
            ],
        }
    ],
}