Canonical Identity Platform API

The API of Canonical's Identity Platform — an OIDC/OAuth 2.0 identity provider built on Ory and delivered as a Juju charm bundle. Covers identities, clients, schemas, providers, roles, groups, rules and entitlements. Canonical publishes an OpenAPI 3.0.3 contract with 45 paths and 79 operations, plus a gRPC-gateway swagger form in the same repository.

Operations 79

GET /api/v0/auth #
GET /api/v0/auth/callback #
GET /api/v0/auth/logout #
GET /api/v0/auth/me #
DELETE /api/v0/authz/apps/{app_id}/groups RemoveAllowedGroupsForApp removes an app from all groups it is allowed in. #
GET /api/v0/authz/apps/{app_id}/groups GetAllowedGroupsForApp retrieves the list of groups an app is allowed in. #
GET /api/v0/authz/groups #
POST /api/v0/authz/groups #
DELETE /api/v0/authz/groups/{group_id}/apps RemoveAllowedAppsFromGroup removes all apps from the allowed list of a group. #
GET /api/v0/authz/groups/{group_id}/apps GetAllowedAppsInGroup retrieves the list of apps allowed in a specific group. #
POST /api/v0/authz/groups/{group_id}/apps AddAllowedAppToGroup adds an app to the allowed list of a group. #
DELETE /api/v0/authz/groups/{group_id}/apps/{app_id} RemoveAllowedAppFromGroup removes a specific app from the allowed list of a group. #
DELETE /api/v0/authz/groups/{id} #
GET /api/v0/authz/groups/{id} #
PUT /api/v0/authz/groups/{id} #
GET /api/v0/authz/groups/{id}/users #
POST /api/v0/authz/groups/{id}/users #
DELETE /api/v0/authz/groups/{id}/users/{user_id} #
GET /api/v0/authz/users/{id}/groups #
PUT /api/v0/authz/users/{id}/groups #
GET /api/v0/clients #
POST /api/v0/clients #
DELETE /api/v0/clients/{id} #
GET /api/v0/clients/{id} #
PUT /api/v0/clients/{id} #
GET /api/v0/groups #
POST /api/v0/groups #
DELETE /api/v0/groups/{id} #
GET /api/v0/groups/{id} #
PATCH /api/v0/groups/{id} #
GET /api/v0/groups/{id}/entitlements #
PATCH /api/v0/groups/{id}/entitlements #
DELETE /api/v0/groups/{id}/entitlements/{entitlementId} #
GET /api/v0/groups/{id}/identities #
PATCH /api/v0/groups/{id}/identities #
DELETE /api/v0/groups/{id}/identities/{identityId} #
GET /api/v0/groups/{id}/roles #
POST /api/v0/groups/{id}/roles #
DELETE /api/v0/groups/{id}/roles/{roleId} #
GET /api/v0/identities #
POST /api/v0/identities #
DELETE /api/v0/identities/{id} #
GET /api/v0/identities/{id} #
PUT /api/v0/identities/{id} #
GET /api/v0/idps #
POST /api/v0/idps #
DELETE /api/v0/idps/{id} #
GET /api/v0/idps/{id} #
PATCH /api/v0/idps/{id} #
GET /api/v0/me/tenants Public Endpoints #
GET /api/v0/metrics #
GET /api/v0/roles #
POST /api/v0/roles #
DELETE /api/v0/roles/{id} #
GET /api/v0/roles/{id} #
PATCH /api/v0/roles/{id} #
GET /api/v0/roles/{id}/entitlements #
PATCH /api/v0/roles/{id}/entitlements #
DELETE /api/v0/roles/{id}/entitlements/{entitlementId} #
GET /api/v0/roles/{id}/groups #
GET /api/v0/schemas #
POST /api/v0/schemas #
DELETE /api/v0/schemas/{id} #
GET /api/v0/schemas/{id} #
PATCH /api/v0/schemas/{id} #
GET /api/v0/schemas/default #
PUT /api/v0/schemas/default #
GET /api/v0/status #
GET /api/v0/tenants Internal Admin Endpoints #
POST /api/v0/tenants #
DELETE /api/v0/tenants/{tenant_id} #
PATCH /api/v0/tenants/{tenant_id} #
POST /api/v0/tenants/{tenant_id}/invites #
GET /api/v0/tenants/{tenant_id}/users #
POST /api/v0/tenants/{tenant_id}/users #
PATCH /api/v0/tenants/{tenant_id}/users/{user_id} #
GET /api/v0/tenants/lookup Lookup tenants (internal) #
GET /api/v0/users/{user_id}/tenants #
GET /api/v0/version #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/identity-platform-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

canonical-identity-platform-api-openapi.yml Raw ↑
components:
    schemas:
        TenantServiceInviteMemberBody:
            properties:
                email:
                    type: string
                role:
                    type: string
            type: object
        TenantServiceProvisionUserBody:
            properties:
                email:
                    type: string
                role:
                    type: string
            type: object
        TenantServiceUpdateTenantBody:
            properties:
                tenant:
                    $ref: '#/components/schemas/tenantTenantInput'
                update_mask:
                    type: string
            type: object
        TenantServiceUpdateTenantUserBody:
            properties:
                role:
                    type: string
            type: object
        apiauthorizationGroup:
            properties:
                group_id:
                    type: string
            type: object
        apiauthz_groupsCreateGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apiauthz_groupsGroup'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        apiauthz_groupsGetGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apiauthz_groupsGroup'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        apiauthz_groupsGroup:
            properties:
                created_at:
                    format: date-time
                    type: string
                description:
                    type: string
                id:
                    type: string
                name:
                    type: string
                tenant_id:
                    type: string
                type:
                    type: string
                updated_at:
                    format: date-time
                    type: string
            type: object
        apiauthz_groupsListGroupsResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apiauthz_groupsGroup'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        apiauthz_groupsRemoveGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        apiauthz_groupsUpdateGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apiauthz_groupsGroup'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        apigroupsCreateGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apigroupsGroup'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        apigroupsGetGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apigroupsGroup'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        apigroupsGroup:
            properties:
                id:
                    type: string
                name:
                    type: string
            type: object
        apigroupsListGroupsResp:
            properties:
                data:
                    items:
                        type: string
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        apigroupsRemoveGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        apigroupsUpdateGroupResp:
            type: object
        apischemasSchema:
            properties:
                additional_properties:
                    type: object
                id:
                    type: string
                schema:
                    type: object
            type: object
        apistatusStatus:
            properties:
                buildInfo:
                    $ref: '#/components/schemas/statusBuildInfo'
                status:
                    type: string
            type: object
        authenticationMeResp:
            properties:
                email:
                    type: string
                name:
                    type: string
                nonce:
                    type: string
                sid:
                    type: string
                sub:
                    type: string
            type: object
        authorizationAddAllowedAppToGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authorizationApp:
            properties:
                client_id:
                    type: string
            type: object
        authorizationGetAllowedAppsInGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/authorizationApp'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authorizationGetAllowedGroupsForAppResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apiauthorizationGroup'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authorizationRemoveAllowedAppFromGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authorizationRemoveAllowedAppsFromGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authorizationRemoveAllowedGroupsForAppResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authz_groupsAddUserToGroupsResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authz_groupsAddUsersToGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authz_groupsGroupInput:
            properties:
                description:
                    type: string
                name:
                    type: string
                type:
                    type: string
            type: object
        authz_groupsListUserGroupsResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/apiauthz_groupsGroup'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        authz_groupsListUsersInGroupResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/authz_groupsUser'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        authz_groupsRemoveUserFromGroupResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        authz_groupsUser:
            properties:
                created_at:
                    format: date-time
                    type: string
                id:
                    type: string
                role:
                    type: string
                updated_at:
                    format: date-time
                    type: string
            type: object
        clientsClient:
            properties:
                access_token_strategy:
                    type: string
                allowed_cors_origins:
                    items:
                        type: string
                    type: array
                audience:
                    items:
                        type: string
                    type: array
                authorization_code_grant_access_token_lifespan:
                    type: string
                authorization_code_grant_id_token_lifespan:
                    type: string
                authorization_code_grant_refresh_token_lifespan:
                    type: string
                backchannel_logout_session_required:
                    type: boolean
                backchannel_logout_uri:
                    type: string
                client_credentials_grant_access_token_lifespan:
                    type: string
                client_id:
                    type: string
                client_name:
                    type: string
                client_secret:
                    type: string
                client_secret_expires_at:
                    format: int64
                    type: string
                client_uri:
                    type: string
                contacts:
                    items:
                        type: string
                    type: array
                created_at:
                    format: date-time
                    type: string
                frontchannel_logout_session_required:
                    type: boolean
                frontchannel_logout_uri:
                    type: string
                grant_types:
                    items:
                        type: string
                    type: array
                implicit_grant_access_token_lifespan:
                    type: string
                implicit_grant_id_token_lifespan:
                    type: string
                jwks:
                    type: object
                jwks_uri:
                    type: string
                jwt_bearer_grant_access_token_lifespan:
                    type: string
                logo_uri:
                    type: string
                metadata:
                    type: object
                owner:
                    type: string
                policy_uri:
                    type: string
                post_logout_redirect_uris:
                    items:
                        type: string
                    type: array
                redirect_uris:
                    items:
                        type: string
                    type: array
                refresh_token_grant_access_token_lifespan:
                    type: string
                refresh_token_grant_id_token_lifespan:
                    type: string
                refresh_token_grant_refresh_token_lifespan:
                    type: string
                registration_access_token:
                    type: string
                registration_client_uri:
                    type: string
                request_object_signing_alg:
                    type: string
                request_uris:
                    items:
                        type: string
                    type: array
                response_types:
                    items:
                        type: string
                    type: array
                scope:
                    type: string
                sector_identifier_uri:
                    type: string
                skip_consent:
                    type: boolean
                subject_type:
                    type: string
                token_endpoint_auth_method:
                    type: string
                token_endpoint_auth_signing_alg:
                    type: string
                tos_uri:
                    type: string
                updated_at:
                    format: date-time
                    type: string
                userinfo_signed_response_alg:
                    type: string
            type: object
        clientsCreateClientResp:
            properties:
                data:
                    $ref: '#/components/schemas/clientsClient'
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        clientsGetClientResp:
            properties:
                data:
                    $ref: '#/components/schemas/clientsClient'
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        clientsListClientsResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/clientsClient'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        clientsRemoveClientResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        clientsUpdateClientResp:
            properties:
                data:
                    $ref: '#/components/schemas/clientsClient'
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        googlerpcStatus:
            properties:
                code:
                    format: int32
                    type: integer
                details:
                    items:
                        $ref: '#/components/schemas/protobufAny'
                    type: array
                message:
                    type: string
            type: object
        groupsGetGroupIdentitiesResp:
            properties:
                data:
                    items:
                        type: string
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        groupsGetGroupRolesResp:
            properties:
                data:
                    items:
                        type: string
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        groupsIdentities:
            properties:
                identities:
                    items:
                        type: string
                    type: array
            type: object
        groupsListGroupEntitlementsResp:
            properties:
                data:
                    items:
                        type: string
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        groupsRemoveGroupEntitlementResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        groupsRemoveGroupIdentityResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        groupsRemoveGroupRoleResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        groupsRoles:
            properties:
                roles:
                    items:
                        type: string
                    type: array
            type: object
        groupsUpdateGroupEntitlementsResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        groupsUpdateGroupIdentitiesResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        groupsUpdateGroupRolesResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        identitiesCreateIdentityBody:
            properties:
                additional_properties:
                    type: object
                credentials:
                    type: object
                metadata_admin:
                    type: object
                metadata_public:
                    type: object
                recovery_addresses:
                    items:
                        $ref: '#/components/schemas/identitiesRecoveryIdentityAddress'
                    type: array
                schema_id:
                    type: string
                state:
                    type: string
                traits:
                    type: object
                verifiable_addresses:
                    items:
                        $ref: '#/components/schemas/identitiesVerifiableIdentityAddress'
                    type: array
            type: object
        identitiesCreateIdentityResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/identitiesIdentity'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        identitiesGetIdentityResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/identitiesIdentity'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        identitiesIdentity:
            properties:
                additional_properties:
                    additionalProperties: {}
                    type: object
                created_at:
                    format: date-time
                    type: string
                credentials:
                    additionalProperties:
                        $ref: '#/components/schemas/identitiesIdentityCredentials'
                    type: object
                id:
                    type: string
                metadata_admin:
                    type: object
                metadata_public:
                    type: object
                organization_id:
                    $ref: '#/components/schemas/identitiesNullableString'
                recovery_addresses:
                    items:
                        $ref: '#/components/schemas/identitiesRecoveryIdentityAddress'
                    type: array
                schema_id:
                    type: string
                schema_url:
                    type: string
                state:
                    type: string
                state_changed_at:
                    format: date-time
                    type: string
                traits:
                    type: object
                updated_at:
                    format: date-time
                    type: string
                verifiable_addresses:
                    items:
                        $ref: '#/components/schemas/identitiesVerifiableIdentityAddress'
                    type: array
            type: object
        identitiesIdentityCredentials:
            properties:
                additional_properties:
                    additionalProperties: {}
                    type: object
                config:
                    additionalProperties: {}
                    type: object
                created_at:
                    format: date-time
                    type: string
                identifiers:
                    items:
                        type: string
                    type: array
                type:
                    type: string
                updated_at:
                    format: date-time
                    type: string
                version:
                    format: int64
                    type: string
            type: object
        identitiesListIdentitiesResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/identitiesIdentity'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        identitiesNullableString:
            properties:
                isSet:
                    type: boolean
                value:
                    type: string
            type: object
        identitiesRecoveryIdentityAddress:
            properties:
                additional_properties:
                    additionalProperties: {}
                    type: object
                created_at:
                    format: date-time
                    type: string
                id:
                    type: string
                updated_at:
                    format: date-time
                    type: string
                value:
                    type: string
                via:
                    type: string
            type: object
        identitiesRemoveIdentityResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/identitiesIdentity'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        identitiesUpdateIdentityBody:
            properties:
                additional_properties:
                    type: object
                credentials:
                    type: object
                metadata_admin:
                    type: object
                metadata_public:
                    type: object
                schema_id:
                    type: string
                state:
                    type: string
                traits:
                    type: object
            type: object
        identitiesUpdateIdentityResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/identitiesIdentity'
                    type: array
                message:
                    type: string
                meta:
                    $ref: '#/components/schemas/typesPagination'
                status:
                    format: int32
                    type: integer
            type: object
        identitiesVerifiableIdentityAddress:
            properties:
                additional_properties:
                    additionalProperties: {}
                    type: object
                created_at:
                    format: date-time
                    type: string
                id:
                    type: string
                status:
                    type: string
                updated_at:
                    format: date-time
                    type: string
                value:
                    type: string
                verified:
                    type: boolean
                verified_at:
                    format: date-time
                    type: string
                via:
                    type: string
            type: object
        idpsCreateIdpBody:
            properties:
                apple_private_key:
                    type: string
                apple_private_key_id:
                    type: string
                apple_team_id:
                    type: string
                auth_url:
                    type: string
                client_id:
                    type: string
                client_secret:
                    type: string
                id:
                    type: string
                issuer_url:
                    type: string
                label:
                    type: string
                mapper_url:
                    type: string
                microsoft_tenant:
                    type: string
                provider:
                    type: string
                requested_claims:
                    type: string
                scope:
                    items:
                        type: string
                    type: array
                subject_source:
                    type: string
                token_url:
                    type: string
            type: object
        idpsCreateIdpResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/idpsIdp'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        idpsGetIdpResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/idpsIdp'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        idpsIdp:
            properties:
                apple_private_key:
                    type: string
                apple_private_key_id:
                    type: string
                apple_team_id:
                    type: string
                auth_url:
                    type: string
                client_id:
                    type: string
                client_secret:
                    type: string
                id:
                    type: string
                issuer_url:
                    type: string
                label:
                    type: string
                mapper_url:
                    type: string
                microsoft_tenant:
                    type: string
                provider:
                    type: string
                requested_claims:
                    type: string
                scope:
                    items:
                        type: string
                    type: array
                subject_source:
                    type: string
                token_url:
                    type: string
            type: object
        idpsListIdpsResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/idpsIdp'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        idpsRemoveIdpResp:
            properties:
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        idpsUpdateIdpBody:
            properties:
                apple_private_key:
                    type: string
                apple_private_key_id:
                    type: string
                apple_team_id:
                    type: string
                auth_url:
                    type: string
                client_id:
                    type: string
                client_secret:
                    type: string
                id:
                    type: string
                issuer_url:
                    type: string
                label:
                    type: string
                mapper_url:
                    type: string
                microsoft_tenant:
                    type: string
                provider:
                    type: string
                requested_claims:
                    type: string
                scope:
                    items:
                        type: string
                    type: array
                subject_source:
                    type: string
                token_url:
                    type: string
            type: object
        idpsUpdateIdpResp:
            properties:
                data:
                    items:
                        $ref: '#/components/schemas/idpsIdp'
                    type: array
                message:
                    type: string
                status:
                    format: int32
                    type: integer
            type: object
        protobufAny:
            additionalProperties: {}
            description: |-
                `Any` contains an arbitrary serialized protocol buffer message along with a
                URL that describes the type of the serialized message.

                Protobuf library provides support to pack/unpack Any values in the form
                of utility functions or additional generated methods of the Any type.

                Example 1: Pack and unpack a message in C++.

                    Foo foo = ...;
                    Any any;
                 

# --- truncated at 32 KB (173 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canonical/refs/heads/main/openapi/canonical-identity-platform-api-openapi.yml