> ## Documentation Index > Fetch the complete documentation index at: https://docs.lobstersoftware.com/llms.txt > Use this file to discover all available pages before exploring further. # List registered classes > Lists the classes of one kind that are registered with this instance and a profile member can name, with the label the editor shows, whether the class is deprecated, and a link to its documentation page. The lists are the ones the editor offers and are instance-wide. For `POST_PARSER` and `ENVIRONMENT_CHECK` they are what a profile write accepts for the member. A write also accepts a class the instance configures but this list hides because it is deprecated while deprecated classes are disabled (`PRE_PARSER`, `INTEGRATION_UNIT`, and `RESPONSE` for a plain custom unit), and, for `POST_EXECUTER`, a pro post-executer or any class that loads as a post-executer. `RESPONSE` is what a custom response unit's `customClass` must name (a pro unit takes the pro ones among them); `CUSTOM_CLASS` and `FILE_FILTER` are the editor's lists, which a profile write does not check against. Classes are ordered by simple name. The documentation links come from the documentation index the instance holds in memory, so they are `null` until that index is loaded and never delay the answer. Requires the right to create or change profiles. ## OpenAPI ````json GET /platform/api/profiles/preview/class-registry { "openapi": "3.1.0", "info": { "title": "Lobster Platform API", "description": "**PREVIEW:** This API is in preview and under active development. Endpoints and schemas are subject to breaking changes, and backward compatibility is not guaranteed until the API is promoted to a stable version.\n\nREST API of the Lobster Platform for headless clients. Every operation, schema and member of this document carries a description, and the create operations carry complete examples. Each tag links the page of the Lobster documentation that explains its resources.\n\n## Authentication\nFour authentication flows are available. All of them produce a bearer token that must be sent as `Authorization: Bearer ` on every request.\n\n1. **Authorization code with PKCE** (acting as a user; works with Microsoft and other SSO): the steps are in the `OAuth2AuthorizationCode` security scheme.\n2. **OAuth2 Client Credentials** (machine-to-machine): exchange a client id/secret provisioned in the Lobster administration UI at `POST /dw/register/oauth/token` with `grant_type=client_credentials&client_id=&client_secret=`.\n3. **UI Session Bearer Token**: log in via the Lobster web UI, then exchange the session cookie for a token at `GET /auth/sessionBearerToken`.\n4. **Guest User Login Token**: append a GuestUser `loginToken` as a URL query parameter (`?loginToken=`) to establish a session without a password, then retrieve the bearer token the same way.", "version": "preview" }, "servers": [ { "url": "https://platform-beta-test.lobster-cloud.com" } ], "security": [ { "OAuth2": [] }, { "OAuth2AuthorizationCode": [] }, { "SessionBearer": [] } ], "tags": [ { "name": "Channels", "description": "The channels of a partner, the concrete connections a profile uses to receive or send.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/manage-partners-channels" } }, { "name": "Functions", "description": "The catalogue of mapping functions a profile's mapping can call.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/functions" } }, { "name": "Partners", "description": "Integration partners, the business parties profiles exchange data with.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/manage-partners" } }, { "name": "Profiles", "description": "Integration profiles: what data comes in, how it is mapped and where the result goes.", "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/profiles" } } ], "externalDocs": { "description": "Lobster documentation", "url": "https://docs.lobstersoftware.com/docs/en/profiles" }, "paths": { "/platform/api/profiles/preview/class-registry": { "get": { "tags": [ "Profiles" ], "summary": "List registered classes", "description": "Lists the classes of one kind that are registered with this instance and a profile member can name, with the label the editor shows, whether the class is deprecated, and a link to its documentation page. The lists are the ones the editor offers and are instance-wide. For `POST_PARSER` and `ENVIRONMENT_CHECK` they are what a profile write accepts for the member. A write also accepts a class the instance configures but this list hides because it is deprecated while deprecated classes are disabled (`PRE_PARSER`, `INTEGRATION_UNIT`, and `RESPONSE` for a plain custom unit), and, for `POST_EXECUTER`, a pro post-executer or any class that loads as a post-executer. `RESPONSE` is what a custom response unit's `customClass` must name (a pro unit takes the pro ones among them); `CUSTOM_CLASS` and `FILE_FILTER` are the editor's lists, which a profile write does not check against. Classes are ordered by simple name. The documentation links come from the documentation index the instance holds in memory, so they are `null` until that index is loaded and never delay the answer. Requires the right to create or change profiles.", "operationId": "listRegisteredClasses", "parameters": [ { "name": "kind", "in": "query", "description": "The kind of class to list.", "required": true, "schema": { "type": "string", "enum": [ "PRE_PARSER", "POST_PARSER", "ENVIRONMENT_CHECK", "POST_EXECUTER", "INTEGRATION_UNIT", "RESPONSE", "CUSTOM_CLASS", "FILE_FILTER" ] } } ], "responses": { "200": { "description": "Classes returned.", "content": { "application/json": { "schema": { "type": "object", "description": "Standard Platform API success envelope. Every response carries exactly one of `data` (success) or `error` (failure) at top level.", "properties": { "data": { "$ref": "#/components/schemas/core.ClassRegistry", "title": "ClassRegistry" } }, "required": [ "data" ] } } } }, "400": { "description": "`kind` is missing or not one of the listed values, or another query parameter was sent." }, "403": { "description": "The caller may neither create nor change profiles." }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/ServerError" } } } } }, "components": { "schemas": { "core.ClassRegistry": { "type": "object", "description": "The classes of one kind registered with the instance. Read-only.", "properties": { "class": { "type": "string", "const": "core.ClassRegistry", "description": "The type of this object, always `core.ClassRegistry`. Required where the member it is sent in accepts several types." }, "classes": { "type": "array", "description": "The registered classes, ordered by simple class name.", "items": { "$ref": "#/components/schemas/core.RegisteredClass", "title": "RegisteredClass" } }, "documentationBaseUrl": { "type": "string", "description": "The base URL of the Lobster documentation, from the documentation index the instance holds in memory. `null` while that index is unavailable or its URL is unusable." }, "kind": { "$ref": "#/components/schemas/core.RegisteredClassKind", "description": "The kind the classes belong to.", "title": "RegisteredClassKind" } }, "title": "ClassRegistry" }, "core.RegisteredClass": { "type": "object", "description": "A class registered with the instance. Read-only.", "properties": { "class": { "type": "string", "const": "core.RegisteredClass", "description": "The type of this object, always `core.RegisteredClass`. Required where the member it is sent in accepts several types." }, "className": { "type": "string", "description": "The fully qualified class name, the value for the profile member.", "examples": [ "com.ebd.hub.datawizard.parser.stream.ChainPreParser" ] }, "deprecated": { "type": "boolean", "description": "Whether the class is marked deprecated; `false` where the kind has no such flag." }, "displayName": { "type": "string", "description": "The label the editor shows for the class; the class name where the kind has no label. Not localised." }, "documentationUrl": { "type": "string", "description": "The documentation page of the class if the documentation has one, else the documentation's base URL. `null` only when both are unavailable." }, "parameterHint": { "type": "string", "description": "The hint for the class's parameter, as the administrator curated it (German only). Only preparsers have one; `null` otherwise." } }, "title": "RegisteredClass" }, "core.RegisteredClassKind": { "type": "string", "description": "A kind of class registered with the instance that a profile member names.\n\n- `PRE_PARSER`: A preparser, `extensions.preParser.className`.\n- `POST_PARSER`: A postparser, `extensions.postParser.className`.\n- `ENVIRONMENT_CHECK`: An environment check, `extensions.environmentCheck.className`.\n- `POST_EXECUTER`: A post-executer, the class a response unit or the integration settings run after the job.\n- `INTEGRATION_UNIT`: An integration unit class.\n- `RESPONSE`: A custom response class.\n- `CUSTOM_CLASS`: A custom class of the Cron agents.\n- `FILE_FILTER`: A file filter of the Cron file agents.", "enum": [ "PRE_PARSER", "POST_PARSER", "ENVIRONMENT_CHECK", "POST_EXECUTER", "INTEGRATION_UNIT", "RESPONSE", "CUSTOM_CLASS", "FILE_FILTER" ], "title": "RegisteredClassKind" }, "ErrorResponse": { "type": "object", "description": "Standard Platform API error envelope: every failed request carries a single `error` object. Every response carries exactly one of `data` (success) or `error` (failure) at top level.", "properties": { "error": { "$ref": "#/components/schemas/Error", "description": "What went wrong: branch on its `code`, show its `message`, and read `details` for one entry per failed member." } }, "required": [ "error" ] }, "Error": { "type": "object", "description": "The error that made the request fail.", "properties": { "code": { "type": "string", "description": "Stable machine-readable `UPPER_SNAKE` error code for programmatic handling, e.g. `PARTNER_NOT_FOUND`, `VALIDATION_FAILED` or `FORBIDDEN`. New codes may be added over time; treat an unknown code according to the HTTP status class. The HTTP status itself is carried by the status line only, never duplicated here." }, "message": { "type": "string", "description": "Human-readable, non-localized explanation. Branch on `code`, never on this text." }, "details": { "type": "array", "description": "Individual failures within the request, e.g. one entry per violated field.", "items": { "$ref": "#/components/schemas/ErrorDetail" } } }, "required": [ "code", "message" ] }, "ErrorDetail": { "type": "object", "description": "A single failure within the request.", "properties": { "code": { "type": "string", "description": "Stable machine-readable `UPPER_SNAKE` code of this individual failure, e.g. `FIELD_REQUIRED`, `FIELD_INVALID` or `VALUE_OUT_OF_RANGE`." }, "message": { "type": "string", "description": "Human-readable, non-localized explanation of this individual failure." }, "target": { "type": "string", "description": "What this failure refers to, e.g. the violated field." } }, "required": [ "code", "message" ] } }, "responses": { "Unauthorized": { "description": "Authentication is required or the supplied credentials are invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "UNAUTHORIZED", "message": "Authentication is required to access this resource." } } } } }, "NotFound": { "description": "The requested resource does not exist. The code is resource-specific, e.g. `PARTNER_NOT_FOUND`, `PROFILE_NOT_FOUND` or `CHANNEL_NOT_FOUND`.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "PARTNER_NOT_FOUND", "message": "Partner not found: 42" } } } } }, "ServerError": { "description": "An unexpected server error occurred.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "error": { "code": "INTERNAL_ERROR", "message": "An unexpected error occurred." } } } } } }, "securitySchemes": { "OAuth2": { "type": "oauth2", "description": "OAuth2 client-credentials flow for machine-to-machine access.\nExchange a client id/secret at `/dw/register/oauth/token` for a bearer token, then send it\nas `Authorization: Bearer `. Client credentials are provisioned in the\nLobster administration UI.\n\nThis is the client-credentials token endpoint of the Platform API. `/oauth/token`, the\n`token_endpoint` advertised at `/.well-known/oauth-authorization-server`, serves the authorization\ncode flow of the `OAuth2AuthorizationCode` scheme.", "flows": { "clientCredentials": { "tokenUrl": "/dw/register/oauth/token", "refreshUrl": "/dw/register/oauth/token", "scopes": {} } } }, "OAuth2AuthorizationCode": { "type": "oauth2", "description": "OAuth 2.1 authorization code flow with PKCE, for acting as a signed-in user. It works with Microsoft and other single sign-on providers: the provider only confirms the user's identity to the platform, which then issues its own token.\n\n1. `POST /oauth/register` (no authentication) with the JSON body `{\"redirect_uris\": [\"\"]}` returns a `client_id`. The user's browser has to reach the redirect URI.\n2. Open `/oauth/authorize` in the user's browser with `response_type=code`, `client_id`, `redirect_uri`, `state` and a `code_challenge` with `code_challenge_method=S256`. `state` is a fresh unguessable value per request, and `code_challenge` is the S256 hash of a `code_verifier` freshly generated per request from a cryptographically secure random source (43 to 128 characters, RFC 7636). The user signs in on the platform's login page, and the browser is redirected to the redirect URI with `code` and `state`; a callback whose `state` differs from the one sent is to be rejected.\n3. The code is valid for 30 seconds. Exchange it at `POST /oauth/token`, form-encoded, with `grant_type=authorization_code`, `code`, `redirect_uri`, `code_verifier` and `client_id`.\n4. The answer carries `access_token` (valid 30 minutes), `refresh_token` (valid 48 hours) and `expires_in` **in milliseconds**. Refresh with `grant_type=refresh_token`, `refresh_token` and `client_id`.", "flows": { "authorizationCode": { "authorizationUrl": "/oauth/authorize", "tokenUrl": "/oauth/token", "refreshUrl": "/oauth/token", "scopes": {} } } }, "SessionBearer": { "type": "http", "description": "Bearer token obtained from an authenticated browser or guest-user session.\n\n**Flow 1 — UI login:** Log in via the Lobster web UI at `/`, then call\n`GET /auth/sessionBearerToken` to exchange the session cookie for a bearer token.\n\n**Flow 2 — Guest user login token:** Append a GuestUser `loginToken` as a URL\nquery parameter to the base URL to establish a password-free session:\n```\nGET ?loginToken=\n```\nThen call `GET /auth/sessionBearerToken` to obtain the bearer token.", "scheme": "bearer" } } } } ````