# koppla > koppla GmbH (Potsdam, Germany) builds Bauterminplan — construction scheduling > software for general contractors, general planners, project developers and > architects. The platform covers lean-construction scheduling, day-to-day project > control and collaboration, company-wide standard templates, reporting and > analytics, a jobsite mobile app, AI-assisted import of existing schedules from MS > Project / Asta Powerproject / Primavera, and a BIM integration that adds the time > dimension (4D) to the model. koppla reports 100+ construction companies, 600+ live > projects and over EUR 15 billion of managed construction volume. Generated by the API Evangelist enrichment pipeline on 2026-07-19. This file was generated from the catalog and live probes; koppla publishes no llms.txt of its own (https://www.koppla.de/llms.txt returns 404). ## API access koppla has a real API but it is **not a public developer offering**. An "Offene Schnittstelle / API" is listed as an included capability of the Enterprise plan only. There is no developer portal, no API reference, no SDK, no sandbox and no self-service signup. Access is provisioned per contract. - Primary API: GraphQL at https://api.koppla.de/api/graphql/v1 - A REST API is in progress (deprecation notes in the GraphQL schema point at it; the web client references https://api-v2.koppla.de). It is undocumented publicly. - Auth: bearer token, WorkOS-backed SSO. Unauthenticated data requests return `extensions.code = UNAUTHENTICATED`. - Schema introspection is answered without credentials, which is how the schema in this repo was captured. Data access itself is correctly gated. ## Specs - [GraphQL schema (SDL)](graphql/koppla-graphql.graphql): 384 types, 73 queries, 81 mutations - [GraphQL introspection (JSON)](graphql/koppla-graphql-introspection.json) ## Artifacts - [Data model](data-model/koppla-data-model.yml): 58 entities, 207 relationships - [Conventions](conventions/koppla-conventions.yml): Relay cursor pagination, GraphQL error envelope, no idempotency - [Authentication](authentication/koppla-authentication.yml): bearer token, WorkOS, RBAC, multi-tenant - [Error codes](errors/koppla-error-codes.yml) - [Lifecycle](lifecycle/koppla-lifecycle.yml): 45 deprecated fields, GraphQL-to-REST migration, status page - [Conformance](conformance/koppla-conformance.yml): ISO/IEC 27001, TISAX, GDPR - [Trust center](security/koppla-trust-center.yml) - [Vulnerability disclosure](security/koppla-vulnerability-disclosure.yml) - [Domain security](security/koppla-domain-security.yml) - [Well-known](well-known/koppla-well-known.yml): none published - [MCP candidate tools](mcp/koppla-mcp.yml): 154 derived candidates, not provider-published - [Agent skills](skills/_index.yml) ## Agent notes - Every list is a Relay cursor connection: `first` + `after`, loop while `pageInfo.hasNextPage`. - **There is no idempotency mechanism.** Retried mutations duplicate data. Verify with a read before retrying any write. `clientMutationId` is correlation only, not deduplication. - Errors come back as HTTP 200 with an `errors[]` array; gateway rejections come back as HTTP 403 plain JSON. Handle both. - 45 schema fields are deprecated with stated replacements — consult the SDL before selecting fields. Prefer `ticketsV2`, `createOrderStatusReports`, `createOrderPhotoV2`, and the `*V2` siblings generally. - koppla is multi-tenant; several root queries require a `tenant` ID. `userProjects` scopes to your own memberships and needs none. ## Docs - [Website](https://www.koppla.de/) - [Pricing](https://www.koppla.de/preise) - [Help center](https://support.koppla.de/de) - [Blog](https://www.koppla.de/blog) - [Status](https://status.koppla.de/) - [Trust center](https://security.koppla.de/) - [Login](https://my.koppla.de/sign_in) - [Imprint](https://www.koppla.de/impressum)