> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://contentful.com/developers/docs/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/_mcp/server. Contentful's User Management API helps organizations programmatically manage their organizations, organization memberships, teams, space memberships and more. > **Info** > > **Disclaimer:** The User Management API is available for Premium/Enterprise customers on [current pricing plans](https://www.contentful.com/pricing/). > **Info** > > **Note:** For EU data residency customers, the Base URL is *[https://api.eu.contentful.com](https://api.eu.contentful.com)*. ## Basic API information API Base URL `https://api.contentful.com` *This is a read/write API* ## Authentication A valid Content Management API [token](/references/authentication#the-content-management-api) must be included for all requests documented in this section, as follows: * In the `Authorization` header, specifically as: `Authorization: Bearer MY_ACCESS_TOKEN`. * In the `access_token` URL query parameter: `?access_token=MY_ACCESS_TOKEN` For security reasons Contentful strongly recommends passing the token via the `Authorization` header. Note that all permissions and access rights for API endpoints in this section are derived from the user on whose behalf the access token was generated. ## Pagination Contentful returns collections of resources in a wrapper object that contains extra information useful for paginating over large result sets. ### Example Usage Example query string: ``` limit=25&skip=50 ``` Example response: ```js { "sys": { "type": "Array" }, "skip": 50, "limit": 25, "total": 1256, "items": [ /* 25 individual resources */ ] } ``` ### Request Parameters | Parameter | Description | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `skip` | Specify an offset (as an integer) to paginate through results. The first "page" is `skip=0`. If your limit is `10`, the second page would be `skip=10`, the third would be `skip=20`, and so on. | | `limit` | Specify (as an integer) the maximum number of results. The maximum allowed value for limit is 100. | ### Response Attributes Paginated collections include a few additional top-level attributes related to pagination: | Attribute | Description | | --------- | ----------------------------------------------------------------------------------------- | | `skip` | The offset specified in the request | | `limit` | The limit specified in the request (or the default for the collection, if none specified) | | `total` | The total number (i.e. unpaginated) of resources in the collection specified by the query | | `items` | The resources for the current request, as scoped by any pagination or filter parameters | ## Sorting Results You can use the `order` parameter when paging through larger result sets to keep ordering predictable. ### Example Usage ``` order=name,-sys.createdAt ``` * Results are returned in ascending order for the specified attributes(s). * Use `-` in front of the attribute to specify descending order. * Separate multiple sort attributes with a comma. Sort fields are applied in the order specified. * Attributes are identified by their path (e.g. `sys.user.firstName`). * See [endpoint documentation](#/reference) for a list of which order attributes are supported for that endpoint. ## Including Related Resources You can use the `include` parameter to include linked resources in your response. This allows you to avoid making additional requests to fetch related resources. ### Example Usage ``` include=sys.user,sys.createdBy ``` As a more detailed explanation, envision the following API request and response: #### Request ``` GET /organizations/some_organization_id/organization_memberships ``` #### Response ```js { "total": 1, "limit": 25, "skip": 0, "sys": { "type": "Array" }, "items": [{ "sys": { "type": "OrganizationMembership", "id": "0xWanD4AZI2AR35wW9q51n", "version": 0, "createdAt": "2015-05-18T11:29:46.809Z", "updatedAt": "2015-05-18T11:29:46.809Z", "lastActiveAt": null, "status": "active", "sso": null, "user": { "sys": { "type": "Link", "linkType": "User", "id": "7BslKh9TdKGOK41VmLDjFZ" } }, "updatedBy": { "sys": { "type": "Link", "linkType": "User", "id": "7BslKh9TdKGOK41VmLDjFZ" } }, "createdBy": { "sys": { "type": "Link", "linkType": "User", "id": "7BslKh9TdKGOK41VmLDjFZ" } } }, "role": "admin" }] } ``` To fetch the linked users referenced in `sys.user` and `sys.createdBy`, you would normally need to make subsequent API calls. Using the `include` parameter you can request the linked users to be "included" in the response: #### Request ``` GET /organizations/some_organization_id/organization_memberships?include=sys.user,sys.updatedBy ``` #### Response ```js { // ... "items": [{ "sys": { "type": "OrganizationMembership", "id": "0xWanD4AZI2AR35wW9q51n", "version": 0, "createdAt": "2015-05-18T11:29:46.809Z", "updatedAt": "2015-05-18T11:29:46.809Z", "lastActiveAt": null, "status": "active", "sso": null, "user": { "sys": { "type": "Link", "linkType": "User", "id": "7BslKh9TdKGOK41VmLDjFZ" } }, "updatedBy": { "sys": { "type": "Link", "linkType": "User", "id": "7BslKh9TdKGOK41VmLDjFZ" } }, "createdBy": { "sys": { "type": "Link", "linkType": "User", "id": "7BslKh9TdKGOK41VmLDjFZ" } } }, "role": "admin" }], "includes": { "User": [{ "firstName": "Jane", "lastName": "Smith", "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "type": "User" } }, { "firstName": "Mary", "lastName": "Jones", "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "type": "User" } } ] } } ``` As you can see, the link objects (`user` and `createdBy`) are now fully resolved inside the `includes` attribute in the response, organized by type (i.e. `User`). ### Additional Notes * Linked resources are returned in the `includes` attribute of the response body, organized by type. * Only resources related to the current result set are included in the response. For example, if you are paginating through a list of results, `include` only includes related resources for that page (not the entire result set). * Resources to include are identified by their path in the query string. * See [endpoint documentation](#/reference) for a list of which include fields are supported for a given collection endpoint. ## Searching Multiple Attributes Some collection endpoints support a `query` parameter that performs a full-text search across multiple resource attributes. ### Example Usage ``` query=foo ``` * See [endpoint documentation](#/reference) for details about which fields are searched for a given endpoint. ## Filtering results You can use a variety of filter parameters to search and filter items in the response from collection endpoints. ### Example Usage ``` name[match]=fred&sys.user.sys.id[in]=abc123,zyx987&sys.updatedAt[lt]=2018-09-01 ``` In general the format of a filter parameter is as follows: ``` field[operator]=value ``` ### Operators For each supported field, one or more operators is available. This table explains their usage: | Operator | Description | | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `eq` | The resource field exactly matches the specified value. E.g. `name[eq]=fred` (or `name=fred` for short) | | `ne` | The resource field does *not* match the specified value. E.g. `name[ne]=fred` | | `match` | The resource field does includes the specified value. E.g. `name[match]=fre` | | `in` | The resource field matches one of the specified values in a comma separated list. E.g. `sys.user.sys.id[in]=abc123,zyx987` | | `nin` | The resource field does *not* match at least one of the specified values in a comma separated list. E.g. `sys.user.sys.id[nin]=abc123,zyx987` | | `exists` | The resource field is not null if the specified value is `true`, or null if the specified value is `false`. E.g. `sys.updatedAt[exists]=true` | | `lt` | The resource field is less than the specified value. E.g. `sys.updatedAt[lt]=2018-09-01` | | `lte` | The resource field is less than or equal to the specified value. E.g. `sys.updatedAt[lte]=2018-09-01` | | `gt` | The resource field is greater than the specified value. E.g. `sys.updatedAt[gt]=2018-09-01` | | `gte` | The resource field is greater than or equal to the specified value. E.g. `sys.updatedAt[gte]=2018-09-01` |