Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein.
Bestehender Benutzer (status: ASSIGNED): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die erste Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. projects und regions dürfen entfallen.
Unbekannte E-Mail (status: INVITED): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen.
Adressierung: Jeder Projekteintrag enthält genau eines von project_number oder external_id. project_number ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann external_id. Regionen werden über region_number adressiert.
Upsert: Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen.
Leerzeichen an email, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.
Weist einer E-Mail mandantenweite Rollen und optional Projekt- und Regionsmitgliedschaften zu. Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Zuweisungen bleiben bestehen.Der API-Schlüssel muss ein Kunden-API-Schlüssel sein.
Rollentitel müssen exakt einer Rolle des Mandanten entsprechen. Die erste Rolle ist die projektbezogene Rolle jeder Mitgliedschaft und jeder Projekteinladung.
Gehört die E-Mail bereits zu einem Benutzer, werden alle Rollen mandantenweit hinzugefügt (ASSIGNED). Nicht genannte Rollen, Projekte und Regionen bleiben unverändert. Eine erneute Anfrage ersetzt die projektbezogene Rolle durch die erste Rolle der neuen Anfrage.
Ist die E-Mail unbekannt, sind projects oder regions erforderlich (INVITED). Die Projekteinladung speichert die erste Rolle; Regionseinladungen enthalten keine Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Senden Sie die Anfrage erneut, sobald der Benutzer existiert, um alle mandantenweiten Rollen zu setzen.
project_number ist je Buchungskreis eindeutig. Ist sie im Mandanten mehrdeutig, antwortet die API mit 409; verwenden Sie external_id.
Jeder Projekteintrag enthält genau eines von project_number oder external_id. Dasselbe Projekt oder dieselbe Region darf nicht zweimal vorkommen, auch wenn zwei Kennungen dasselbe Ziel auflösen.
Titel der mandantenweiten Rollen. Mindestens eine, ohne Duplikate.
Jede Rolle muss im Mandanten existieren. Bei Projekten wird die erste Rolle
als projektbezogene Rolle verwendet.
Optionale Projekte. Jeder Eintrag enthält genau eines von project_number oder external_id.
Dasselbe Projekt darf nicht zweimal vorkommen. Für unbekannte E-Mails ist mindestens
ein Projekt oder eine Region erforderlich.
Optionale Projektregionen, adressiert über region_number. Duplikate werden abgelehnt.
Bestehende Benutzer erhalten die Mitgliedschaft sofort; unbekannte E-Mails eine ausstehende Einladung.
ASSIGNED, wenn die E-Mail bereits zu einem Benutzer des Mandanten gehört.
INVITED, wenn stattdessen ausstehende Projekt- und/oder Regionseinladungen gespeichert wurden.
UUIDs der aufgelösten Projektregionen. Leer, wenn keine Regionen angefragt wurden.
Beispiel:
["55555555-5555-4555-8555-555555555555"]
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"comstruct API Dokumentation","colors":{"primary":"#2F6879","light":"#3A8599","dark":"#1E4A57"},"logo":{"light":"https://mintcdn.com/comstruct/Jpsyju8lznqRSEZJ/logo/light.svg?fit=max\u0026auto=format\u0026n=Jpsyju8lznqRSEZJ\u0026q=85\u0026s=acbbee3c044994a3e7752740782d923f","dark":"https://mintcdn.com/comstruct/Jpsyju8lznqRSEZJ/logo/dark.svg?fit=max\u0026auto=format\u0026n=Jpsyju8lznqRSEZJ\u0026q=85\u0026s=3849d724919d807467f3b58d490d50c0"},"favicon":"https://mintcdn.com/comstruct/CqrhxzMG7_sRCFwK/favicon.png?fit=max\u0026auto=format\u0026n=CqrhxzMG7_sRCFwK\u0026q=85\u0026s=ff5a12229b0e3075a0e33fe7354ddae3","api":{},"navbar":{"links":[{"href":"mailto:support@comstruct.com","label":"Support"}],"primary":{"type":"button","label":"App öffnen","href":"https://app.comstruct.com"}},"footer":{"socials":{"linkedin":"https://linkedin.com/company/comstruct","website":"https://comstruct.com"}},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:support@comstruct.com"}]},"languages":[{"language":"de","default":true,"href":""},{"language":"en","href":"en"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"comstruct","hasAudioNarration":false,"actualSubdomain":"comstruct","customDomains":["developer.comstruct.com"],"gitSource":{"type":"github","owner":"comstruct-engineering","repo":"comstruct-one","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae07c9f83d301a35cf45e92","collectionId":"897c9b73-5f93-4de2-ad4f-7de8f19c85cd","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae07c9f83d301a35cf45e92"},"entitlements":{},"buildId":"6ae07c9f83d301a35cf45e92","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"de","tag":"API-Referenz","count":69},{"language":"en","tag":"API Reference","count":69},{"language":"de","tag":"Rechnungs-Dimensionen","count":15},{"language":"en","tag":"Invoice dimensions","count":15},{"language":"de","tag":"Lieferungen","count":11},{"language":"en","tag":"Deliveries","count":11},{"language":"de","tag":"Stammdaten","count":10},{"language":"de","tag":"Rechnungen","count":10},{"language":"en","tag":"Master data","count":10},{"language":"en","tag":"Invoices","count":10},{"language":"de","tag":"Projekte","count":9},{"language":"en","tag":"Projects","count":9},{"language":"de","tag":"Erste Schritte","count":5},{"language":"en","tag":"Getting started","count":5},{"language":"de","tag":"Integrationsleitfäden","count":4},{"language":"en","tag":"Integration guides","count":4},{"language":"de","tag":"Lieferanten","count":3},{"language":"de","tag":"Workflows","count":3},{"language":"en","tag":"Suppliers","count":3},{"language":"en","tag":"Workflows","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/projects-user-assignments","slug":"/api-reference/projects-user-assignments","pageMetadata":{"title":"Benutzer zuweisen","openapi":"POST /projects/user-assignments","description":"**Erforderliche Berechtigungen:** `projects:write`, `users:read`, `roles:read`\n\nWeist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein.\n\n**Bestehender Benutzer** (`status: ASSIGNED`): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die **erste** Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. `projects` und `regions` dürfen entfallen.\n\n**Unbekannte E-Mail** (`status: INVITED`): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in `role_ids` zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen.\n\n**Adressierung:** Jeder Projekteintrag enthält genau eines von `project_number` oder `external_id`. `project_number` ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann `external_id`. Regionen werden über `region_number` adressiert.\n\n**Upsert:** Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen.\n\nLeerzeichen an `email`, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\n","href":"/api-reference/projects-user-assignments"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Erforderliche Berechtigungen:\"\n }), \" \", _jsx(_components.code, {\n children: \"projects:write\"\n }), \", \", _jsx(_components.code, {\n children: \"users:read\"\n }), \", \", _jsx(_components.code, {\n children: \"roles:read\"\n })]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Bestehender Benutzer\"\n }), \" (\", _jsx(_components.code, {\n children: \"status: ASSIGNED\"\n }), \"): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die \", _jsx(_components.strong, {\n children: \"erste\"\n }), \" Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. \", _jsx(_components.code, {\n children: \"projects\"\n }), \" und \", _jsx(_components.code, {\n children: \"regions\"\n }), \" dürfen entfallen.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Unbekannte E-Mail\"\n }), \" (\", _jsx(_components.code, {\n children: \"status: INVITED\"\n }), \"): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in \", _jsx(_components.code, {\n children: \"role_ids\"\n }), \" zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Adressierung:\"\n }), \" Jeder Projekteintrag enthält genau eines von \", _jsx(_components.code, {\n children: \"project_number\"\n }), \" oder \", _jsx(_components.code, {\n children: \"external_id\"\n }), \". \", _jsx(_components.code, {\n children: \"project_number\"\n }), \" ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann \", _jsx(_components.code, {\n children: \"external_id\"\n }), \". Regionen werden über \", _jsx(_components.code, {\n children: \"region_number\"\n }), \" adressiert.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Upsert:\"\n }), \" Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Leerzeichen an \", _jsx(_components.code, {\n children: \"email\"\n }), \", Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`übersicht`,children:`Übersicht`}),`\n`,_jsx(_components.p,{children:`Weist einer E-Mail mandantenweite Rollen und optional Projekt- und Regionsmitgliedschaften zu. Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Zuweisungen bleiben bestehen.`}),`\n`,_jsxs(_components.p,{children:[`Der API-Schlüssel muss ein `,_jsx(_components.strong,{children:`Kunden-API-Schlüssel`}),` sein.`]}),`\n`,_jsx(Heading,{level:`2`,id:`berechtigungen`,children:`Berechtigungen`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`Beschreibung`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`projects:write`})}),_jsx(_components.td,{children:`Projekte erstellen und ändern`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`users:read`})}),_jsx(_components.td,{children:`Benutzerdaten lesen`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`roles:read`})}),_jsx(_components.td,{children:`Rollendaten lesen`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`verhalten`,children:`Verhalten`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Rollentitel müssen exakt einer Rolle des Mandanten entsprechen. Die `,_jsx(_components.strong,{children:`erste`}),` Rolle ist die projektbezogene Rolle jeder Mitgliedschaft und jeder Projekteinladung.`]}),`\n`,_jsxs(_components.li,{children:[`Gehört die E-Mail bereits zu einem Benutzer, werden alle Rollen mandantenweit hinzugefügt (`,_jsx(_components.code,{children:`ASSIGNED`}),`). Nicht genannte Rollen, Projekte und Regionen bleiben unverändert. Eine erneute Anfrage ersetzt die projektbezogene Rolle durch die erste Rolle der neuen Anfrage.`]}),`\n`,_jsxs(_components.li,{children:[`Ist die E-Mail unbekannt, sind `,_jsx(_components.code,{children:`projects`}),` oder `,_jsx(_components.code,{children:`regions`}),` erforderlich (`,_jsx(_components.code,{children:`INVITED`}),`). Die Projekteinladung speichert die erste Rolle; Regionseinladungen enthalten keine Rolle. Weitere Rollen werden geprüft und in `,_jsx(_components.code,{children:`role_ids`}),` zurückgegeben. Senden Sie die Anfrage erneut, sobald der Benutzer existiert, um alle mandantenweiten Rollen zu setzen.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`project_number`}),` ist je Buchungskreis eindeutig. Ist sie im Mandanten mehrdeutig, antwortet die API mit `,_jsx(_components.strong,{children:`409`}),`; verwenden Sie `,_jsx(_components.code,{children:`external_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Jeder Projekteintrag enthält genau eines von `,_jsx(_components.code,{children:`project_number`}),` oder `,_jsx(_components.code,{children:`external_id`}),`. Dasselbe Projekt oder dieselbe Region darf nicht zweimal vorkommen, auch wenn zwei Kennungen dasselbe Ziel auflösen.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`response-codes`,children:`Response Codes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`Beschreibung`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`201`})}),_jsx(_components.td,{children:`Zuweisung oder Einladungen gespeichert`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Ungültige Anfrage`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`Nicht autorisiert`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`403`})}),_jsx(_components.td,{children:`Fehlende Berechtigung oder kein Kunden-API-Schlüssel`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsx(_components.td,{children:`Projekt, Region oder Rolle nicht gefunden`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`409`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`project_number`}),` ist im Mandanten mehrdeutig`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`500`})}),_jsx(_components.td,{children:`Zuweisung oder Einladungen konnten nicht gespeichert werden`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Benutzer zuweisen","openapi":"POST /projects/user-assignments","description":"**Erforderliche Berechtigungen:** `projects:write`, `users:read`, `roles:read`\n\nWeist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein.\n\n**Bestehender Benutzer** (`status: ASSIGNED`): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die **erste** Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. `projects` und `regions` dürfen entfallen.\n\n**Unbekannte E-Mail** (`status: INVITED`): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in `role_ids` zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen.\n\n**Adressierung:** Jeder Projekteintrag enthält genau eines von `project_number` oder `external_id`. `project_number` ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann `external_id`. Regionen werden über `region_number` adressiert.\n\n**Upsert:** Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen.\n\nLeerzeichen an `email`, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\n","href":"/api-reference/projects-user-assignments"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Übersicht","slug":"übersicht","depth":2,"children":[]},{"title":"Berechtigungen","slug":"berechtigungen","depth":2,"children":[]},{"title":"Verhalten","slug":"verhalten","depth":2,"children":[]},{"title":"Response Codes","slug":"response-codes","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"assignProjectUser","summary":"Benutzerrollen und Mitgliedschaften zuweisen","description":"**Erforderliche Berechtigungen:** `projects:write`, `users:read`, `roles:read`\n\nWeist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein.\n\n**Bestehender Benutzer** (`status: ASSIGNED`): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die **erste** Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. `projects` und `regions` dürfen entfallen.\n\n**Unbekannte E-Mail** (`status: INVITED`): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in `role_ids` zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen.\n\n**Adressierung:** Jeder Projekteintrag enthält genau eines von `project_number` oder `external_id`. `project_number` ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann `external_id`. Regionen werden über `region_number` adressiert.\n\n**Upsert:** Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen.\n\nLeerzeichen an `email`, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\n","tags":["Projects"],"security":["396f1e4b-8177-44ff-9cf8-5a9938efad49"],"requestBody":"4385622d-fd50-4ee1-a720-0944288682c3","responses":{"201":"1e7e85c9-d757-493d-aab8-272ecfe69f6c","400":"56a538df-21fa-4e5f-b74b-df25e4833116","401":"ee15989a-ce15-4e17-b120-709ab25361d4","403":"79344ab4-f127-4e8f-9089-50658aff65ee","404":"83976c96-a1a6-42f8-892f-4c838c17da71","409":"66cef1bb-0ba2-4a82-80d3-758b3531e67a","500":"baf0b14c-7b90-4bd7-b3ac-285211ad9214"},"method":"post","type":"path","servers":["91e6503e-dce2-4e57-badc-42232705e766","c41671e9-3515-49e4-a8db-5349c07af4b2"],"path":"/projects/user-assignments","baseUrlOptions":["https://api.comstruct.com/v1","https://api.comstruct.com"],"title":"Benutzerrollen und Mitgliedschaften zuweisen","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","roles"],"properties":{"email":{"type":"string","format":"email","description":"E-Mail-Adresse, der die Rollen und Mitgliedschaften zugewiesen werden.","example":"jane.doe@example.com","isRequired":true,"uniqueKey":"email","typeLabel":"string\u003cemail>"},"roles":{"type":"array","minItems":1,"uniqueItems":true,"description":"Titel der mandantenweiten Rollen. Mindestens eine, ohne Duplikate.\nJede Rolle muss im Mandanten existieren. Bei Projekten wird die erste Rolle\nals projektbezogene Rolle verwendet.\n","items":{"type":"string","uniqueKey":"roles.items.[INDEX]","typeLabel":"string"},"example":["MANAGER","CONTROLLER"],"isRequired":true,"uniqueKey":"roles","typeLabel":"string[]"},"projects":{"type":"array","description":"Optionale Projekte. Jeder Eintrag enthält genau eines von `project_number` oder `external_id`.\nDasselbe Projekt darf nicht zweimal vorkommen. Für unbekannte E-Mails ist mindestens\nein Projekt oder eine Region erforderlich.\n","items":{"type":"object","description":"Adressiert genau ein Projekt über `project_number` oder `external_id`.","properties":{"project_number":{"type":"string","description":"Projektnummer, eindeutig je Buchungskreis. Schließt `external_id` aus.\nIst die Nummer im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409.\n","example":"PRJ-0001","uniqueKey":"projects.items.[INDEX].project_number","typeLabel":"string"},"external_id":{"type":"string","description":"Externe Projekt-ID des Quellsystems, eindeutig je Mandant. Schließt `project_number` aus.","example":"ERP-4711","uniqueKey":"projects.items.[INDEX].external_id","typeLabel":"string"}},"uniqueKey":"projects.items.[INDEX]","typeLabel":"object"},"uniqueKey":"projects","typeLabel":"object[]"},"regions":{"type":"array","description":"Optionale Projektregionen, adressiert über `region_number`. Duplikate werden abgelehnt.\nBestehende Benutzer erhalten die Mitgliedschaft sofort; unbekannte E-Mails eine ausstehende Einladung.\n","items":{"type":"object","required":["region_number"],"properties":{"region_number":{"type":"string","description":"Projektregionsnummer, eindeutig je Mandant.","example":"REG-001","isRequired":true,"uniqueKey":"regions.items.[INDEX].region_number","typeLabel":"string"}},"uniqueKey":"regions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"regions","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"project_by_number":{"title":"project_by_number","value":{"email":"jane.doe@example.com","roles":["MANAGER"],"projects":[{"project_number":"PRJ-0001"}]}},"project_and_region":{"title":"project_and_region","value":{"email":"jane.doe@example.com","roles":["MANAGER","CONTROLLER"],"projects":[{"external_id":"ERP-4711"}],"regions":[{"region_number":"REG-001"}]}},"roles_only":{"title":"roles_only","value":{"email":"jane.doe@example.com","roles":["MANAGER"]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"1e7e85c9-d757-493d-aab8-272ecfe69f6c":{"description":"Zuweisung oder Einladungen gespeichert","content":{"application/json":{"schema":{"type":"object","required":["success","status","email","role_ids","project_ids","region_ids"],"properties":{"success":{"type":"boolean","description":"Ob die Zuweisung gespeichert wurde","example":true,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"status":{"type":"string","enum":["ASSIGNED","INVITED"],"description":"`ASSIGNED`, wenn die E-Mail bereits zu einem Benutzer des Mandanten gehört.\n`INVITED`, wenn stattdessen ausstehende Projekt- und/oder Regionseinladungen gespeichert wurden.\n","example":"ASSIGNED","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"E-Mail, für die die Zuweisung gespeichert wurde","example":"jane.doe@example.com","isRequired":true,"uniqueKey":"email","typeLabel":"string\u003cemail>"},"role_ids":{"type":"array","description":"UUIDs der aufgelösten mandantenweiten Rollen, in der Reihenfolge der Anfrage","items":{"type":"string","format":"uuid","uniqueKey":"role_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"example":["44444444-4444-4444-8444-444444444444"],"isRequired":true,"uniqueKey":"role_ids","typeLabel":"string\u003cuuid>[]"},"project_ids":{"type":"array","description":"UUIDs der aufgelösten Projekte. Leer, wenn nur Rollen und/oder Regionen zugewiesen wurden.","items":{"type":"string","format":"uuid","uniqueKey":"project_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"example":["33333333-3333-4333-8333-333333333333"],"isRequired":true,"uniqueKey":"project_ids","typeLabel":"string\u003cuuid>[]"},"region_ids":{"type":"array","description":"UUIDs der aufgelösten Projektregionen. Leer, wenn keine Regionen angefragt wurden.","items":{"type":"string","format":"uuid","uniqueKey":"region_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"example":["55555555-5555-4555-8555-555555555555"],"isRequired":true,"uniqueKey":"region_ids","typeLabel":"string\u003cuuid>[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"assigned":{"title":"assigned","value":{"success":true,"status":"ASSIGNED","email":"jane.doe@example.com","role_ids":["44444444-4444-4444-8444-444444444444"],"project_ids":["33333333-3333-4333-8333-333333333333"],"region_ids":[]}},"invited":{"title":"invited","value":{"success":true,"status":"INVITED","email":"jane.doe@example.com","role_ids":["44444444-4444-4444-8444-444444444444"],"project_ids":["33333333-3333-4333-8333-333333333333"],"region_ids":["55555555-5555-4555-8555-555555555555"]}}},"exampleType":"examples"}},"exampleType":"examples"},"56a538df-21fa-4e5f-b74b-df25e4833116":{"description":"Ungültige E-Mail, leere oder doppelte Rollen, doppelte Projekte oder Regionen,\nein Eintrag mit beiden oder ohne `project_number` und `external_id`, oder\n`projects` und `regions` fehlen für eine E-Mail, die keinem Benutzer gehört.\n","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.0.message","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.0.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["message"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.1.error","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.1.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["success"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","isRequired":true,"uniqueKey":"oneOf.2.success","typeLabel":"boolean"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.2.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.2.message","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"message":"Provide exactly one of project_number or external_id","statusCode":400,"success":false},"examples":{"Example":{"title":"Example","value":{"message":"Provide exactly one of project_number or external_id","statusCode":400,"success":false}}},"exampleType":"examples"}},"exampleType":"examples"},"ee15989a-ce15-4e17-b120-709ab25361d4":{"description":"Nicht autorisiert — fehlender oder ungültiger API-Schlüssel","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"79344ab4-f127-4e8f-9089-50658aff65ee":{"description":"Verboten — fehlende Berechtigung oder kein reiner Kunden-API-Schlüssel","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"83976c96-a1a6-42f8-892f-4c838c17da71":{"description":"Projekt, Region oder Rolle existiert im Mandanten nicht","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.0.message","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.0.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["message"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.1.error","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.1.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["success"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","isRequired":true,"uniqueKey":"oneOf.2.success","typeLabel":"boolean"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.2.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.2.message","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"message":"Role(s) not found: MANAGER","statusCode":404,"success":false},"examples":{"Example":{"title":"Example","value":{"message":"Role(s) not found: MANAGER","statusCode":404,"success":false}}},"exampleType":"examples"}},"exampleType":"examples"},"66cef1bb-0ba2-4a82-80d3-758b3531e67a":{"description":"Die `project_number` wird von mehr als einem Buchungskreis des Mandanten verwendet\nund ist daher mehrdeutig. Adressieren Sie das Projekt über `external_id`.\n","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.0.message","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.0.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["message"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.1.error","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.1.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["success"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","isRequired":true,"uniqueKey":"oneOf.2.success","typeLabel":"boolean"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.2.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.2.message","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"message":"project_number PRJ-0001 is used by 2 projects of this tenant, use external_id instead","statusCode":409,"success":false},"examples":{"Example":{"title":"Example","value":{"message":"project_number PRJ-0001 is used by 2 projects of this tenant, use external_id instead","statusCode":409,"success":false}}},"exampleType":"examples"}},"exampleType":"examples"},"baf0b14c-7b90-4bd7-b3ac-285211ad9214":{"description":"Die Zuweisung oder die Einladungen konnten nicht gespeichert werden","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.0.message","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.0.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["message"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.1.error","typeLabel":"string"},"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","uniqueKey":"oneOf.1.success","typeLabel":"boolean"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["success"],"example":{"error":"Validation failed","message":"The provided data did not pass validation checks"},"properties":{"success":{"type":"boolean","description":"Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden","isRequired":true,"uniqueKey":"oneOf.2.success","typeLabel":"boolean"},"error":{"type":"string","description":"Fehlermeldung, die beschreibt, was schiefgelaufen ist","uniqueKey":"oneOf.2.error","typeLabel":"string"},"message":{"type":"string","description":"Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht","uniqueKey":"oneOf.2.message","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Validation failed","message":"The provided data did not pass validation checks"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"396f1e4b-8177-44ff-9cf8-5a9938efad49":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API-Schlüssel zur Authentifizierung. Kontaktieren Sie Ihren Customer Success Manager, um einen API-Schlüssel zu erhalten.\n\nJeder Endpunkt erfordert spezifische Berechtigungen (Scopes); die erforderlichen Scopes werden pro Endpunkt angezeigt.\n","scopes":["projects:write","users:read","roles:read"],"schemeName":"ApiKey"}}},"servers":{"91e6503e-dce2-4e57-badc-42232705e766":{"url":"https://api.comstruct.com/v1","description":"Haupt-API-Endpunkte (erfordert API-Schlüssel-Authentifizierung)","variables":{}},"c41671e9-3515-49e4-a8db-5349c07af4b2":{"url":"https://api.comstruct.com","description":"Basisserver für Kalender- und IDS-Endpunkte (andere Authentifizierung)","variables":{}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API-Schlüssel zur Authentifizierung. Kontaktieren Sie Ihren Customer Success Manager, um einen API-Schlüssel zu erhalten.\n\nJeder Endpunkt erfordert spezifische Berechtigungen (Scopes); die erforderlichen Scopes werden pro Endpunkt angezeigt.\n","scopes":["projects:write","users:read","roles:read"],"schemeName":"ApiKey"},"schema":{"title":"X-API-Key","type":"string","description":"API-Schlüssel zur Authentifizierung. Kontaktieren Sie Ihren Customer Success Manager, um einen API-Schlüssel zu erhalten.\n\nJeder Endpunkt erfordert spezifische Berechtigungen (Scopes); die erforderlichen Scopes werden pro Endpunkt angezeigt.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKey","name":"X-API-Key"}],"title":"ApiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"comstruct","siteName":"comstruct API Dokumentation","title":"Benutzer zuweisen - comstruct API Dokumentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"de":{"href":"/api-reference/projects-user-assignments","matchLevel":0},"en":{"href":"/en/api-reference/projects-user-assignments","matchLevel":1}}},"lastModified":"2026-10-27T09:54:45.081Z","originalFileLocation":"api-reference/projects-user-assignments.mdx","locale":"de"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Erforderliche Berechtigungen: projects:write, users:read, roles:read Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein. Bestehender Benutzer (status: ASSIGNED): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die erste Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. projects und regions dürfen entfallen. Unbekannte E-Mail (status: INVITED): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen. Adressierung: Jeder Projekteintrag enthält genau eines von project_number oder external_id. project_number ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann external_id. Regionen werden über region_number adressiert. Upsert: Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen. Leerzeichen an email, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\">\u003cmeta data-mint-head name=\"application-name\" content=\"comstruct API Dokumentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Benutzer zuweisen - comstruct API Dokumentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Erforderliche Berechtigungen: projects:write, users:read, roles:read Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein. Bestehender Benutzer (status: ASSIGNED): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die erste Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. projects und regions dürfen entfallen. Unbekannte E-Mail (status: INVITED): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen. Adressierung: Jeder Projekteintrag enthält genau eines von project_number oder external_id. project_number ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann external_id. Regionen werden über region_number adressiert. Upsert: Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen. Leerzeichen an email, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"comstruct API Dokumentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.comstruct.com/api-reference/projects-user-assignments\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://comstruct.mintlify.app/_mintlify/api/og/v2?division=Projekte\u0026amp;title=Benutzer+zuweisen\u0026amp;description=**Erforderliche+Berechtigungen%3A**+%60projects%3Awrite%60%2C+%60users%3Aread%60%2C+%60roles%3Aread%60%0A%0AWeist+einer+E-Mail+eine+oder+mehrere+mandantenweite+Rollen+zu+und+vergibt+option\u0026amp;theme=c01e2dad7dfa9b44db77ec96\u0026amp;signature=debd14973ef5df01daa11135e536fcce07ff04f5a3d5c76ace3a4efd7a271709\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Benutzer zuweisen - comstruct API Dokumentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Erforderliche Berechtigungen: projects:write, users:read, roles:read Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein. Bestehender Benutzer (status: ASSIGNED): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die erste Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. projects und regions dürfen entfallen. Unbekannte E-Mail (status: INVITED): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen. Adressierung: Jeder Projekteintrag enthält genau eines von project_number oder external_id. project_number ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann external_id. Regionen werden über region_number adressiert. Upsert: Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen. Leerzeichen an email, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://comstruct.mintlify.app/_mintlify/api/og/v2?division=Projekte\u0026amp;title=Benutzer+zuweisen\u0026amp;description=**Erforderliche+Berechtigungen%3A**+%60projects%3Awrite%60%2C+%60users%3Aread%60%2C+%60roles%3Aread%60%0A%0AWeist+einer+E-Mail+eine+oder+mehrere+mandantenweite+Rollen+zu+und+vergibt+option\u0026amp;theme=c01e2dad7dfa9b44db77ec96\u0026amp;signature=debd14973ef5df01daa11135e536fcce07ff04f5a3d5c76ace3a4efd7a271709\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/comstruct/fBUgIQk4CV_VpIlc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"comstruct API Dokumentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2F6879\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.comstruct.com/api-reference/projects-user-assignments\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/projects-user-assignments.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://developer.comstruct.com/api-reference/projects-user-assignments\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://developer.comstruct.com/en/api-reference/projects-user-assignments\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://developer.comstruct.com/api-reference/projects-user-assignments\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.comstruct.com/#organization\",\"name\":\"comstruct API Dokumentation\",\"url\":\"https://developer.comstruct.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/comstruct/Jpsyju8lznqRSEZJ/logo/light.svg?fit=max\u0026auto=format\u0026n=Jpsyju8lznqRSEZJ\u0026q=85\u0026s=acbbee3c044994a3e7752740782d923f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.comstruct.com#website\",\"name\":\"comstruct API Dokumentation\",\"url\":\"https://developer.comstruct.com\",\"publisher\":{\"@id\":\"https://developer.comstruct.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.comstruct.com/api-reference/projects-user-assignments#webpage\",\"url\":\"https://developer.comstruct.com/api-reference/projects-user-assignments\",\"name\":\"Benutzer zuweisen\",\"description\":\"Erforderliche Berechtigungen: projects:write, users:read, roles:read Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein. Bestehender Benutzer (status: ASSIGNED): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die erste Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. projects und regions dürfen entfallen. Unbekannte E-Mail (status: INVITED): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen. Adressierung: Jeder Projekteintrag enthält genau eines von project_number oder external_id. project_number ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann external_id. Regionen werden über region_number adressiert. Upsert: Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen. Leerzeichen an email, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\",\"dateModified\":\"2026-10-27T09:54:45.081Z\",\"isPartOf\":{\"@id\":\"https://developer.comstruct.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.comstruct.com/api-reference/projects-user-assignments#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.comstruct.com/api-reference/projects-user-assignments#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Projekte\",\"item\":\"https://developer.comstruct.com/api-reference/projects\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Benutzer zuweisen\",\"item\":\"https://developer.comstruct.com/api-reference/projects-user-assignments\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.comstruct.com/api-reference/projects-user-assignments#apireference\",\"headline\":\"Benutzer zuweisen\",\"name\":\"Benutzer zuweisen\",\"description\":\"Erforderliche Berechtigungen: projects:write, users:read, roles:read Weist einer E-Mail eine oder mehrere mandantenweite Rollen zu und vergibt optional Mitgliedschaften auf Projekten und/oder Projektregionen. Der API-Schlüssel muss ein reiner Kunden-Schlüssel sein. Bestehender Benutzer (status: ASSIGNED): Die E-Mail gehört bereits zu einem Benutzer des Mandanten (Vergleich ohne Groß-/Kleinschreibung). Alle angegebenen Rollen werden mandantenweit hinzugefügt; bereits vorhandene Rollen bleiben bestehen. Jede Projektmitgliedschaft verwendet die erste Rolle als projektbezogene Rolle und ersetzt bei Wiederholung diese Rolle. Regionsmitgliedschaften werden angelegt; bestehende Regionszeilen bleiben unverändert. projects und regions dürfen entfallen. Unbekannte E-Mail (status: INVITED): Es wird mindestens ein Projekt oder eine Region benötigt. Pro Projekt wird eine ausstehende Einladung mit der ersten Rolle gespeichert, pro Region eine Einladung ohne Rolle. Weitere Rollen werden geprüft und in role_ids zurückgegeben. Mandantenweit gespeichert werden sie, sobald die E-Mail zu einem Benutzer gehört. Wiederholen Sie die Anfrage danach, um alle mandantenweiten Rollen zu setzen. Adressierung: Jeder Projekteintrag enthält genau eines von project_number oder external_id. project_number ist nur je Buchungskreis eindeutig; ist sie im Mandanten mehrfach vergeben, antwortet die API mit HTTP 409 — verwenden Sie dann external_id. Regionen werden über region_number adressiert. Upsert: Eine Wiederholung aktualisiert die bestehenden Zeilen. Ausgelassene Projekte, Regionen und Rollen bleiben unverändert. Alle Schreibvorgänge einer Anfrage laufen in einer Mutation und werden gemeinsam übernommen oder gemeinsam verworfen. Leerzeichen an email, Rollentiteln und Kennungen werden entfernt. Rollentitel müssen exakt einer bestehenden Rolle des Mandanten entsprechen.\",\"url\":\"https://developer.comstruct.com/api-reference/projects-user-assignments\",\"mainEntityOfPage\":{\"@id\":\"https://developer.comstruct.com/api-reference/projects-user-assignments#webpage\"},\"dateModified\":\"2026-10-27T09:54:45.081Z\",\"publisher\":{\"@id\":\"https://developer.comstruct.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.comstruct.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"comstruct API Dokumentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"comstruct API Dokumentation","nav":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:support@comstruct.com"}]},"languages":[{"language":"de","default":true,"tabs":[{"tab":"Erste Schritte","pages":[{"title":"Erste Schritte","href":""}]},{"tab":"API-Referenz","groups":[{"group":"Übersicht","pages":[{"title":"API-Referenz","href":"/api-reference/introduction"}]},{"group":"Projekte","pages":[{"title":"Projekte auflisten","openapi":"GET /projects","href":"/api-reference/projects"},{"title":"Projekt erstellen oder aktualisieren","openapi":"POST /projects","description":"**Erforderliche Berechtigungen:** `projects:write`, `users:read`, `roles:read`, `tenant_settings:read`\n\nErstellt ein neues Projekt oder aktualisiert ein bestehendes Projekt. Dieser Endpunkt führt eine Upsert-Operation basierend auf dem `external_id`-Feld (falls vorhanden) oder der `project_number` durch.\n\n**Hauptfunktionen:**\n- **Upsert-Logik**: Wenn `external_id` angegeben ist und ein Projekt mit dieser ID existiert, wird es aktualisiert. Andernfalls wird `project_number` für den Abgleich verwendet. Wenn keine Übereinstimmung gefunden wird, wird ein neues Projekt erstellt.\n- **Benutzerverwaltung**: Behandelt automatisch Benutzereinladungen und Rollenzuweisungen für Projektteammitglieder.\n- **Regionszuordnung**: Das `region`-Feld kann verwendet werden, um das Projekt einer Projektregion zuzuordnen.\n- **Buchungskreis-Zuordnung**: Das `legal_entity_number`-Feld kann verwendet werden, um das Projekt einem Buchungskreis zuzuordnen.\n- **Koordinaten**: Optionale `latitude` und `longitude` setzen den geografischen Standort. Weglassen belässt den gespeicherten Wert; `null` löscht ihn.\n- **Validierung**: Alle erforderlichen Felder (`title`, `project_number`) werden vor der Verarbeitung validiert.\n\n**Best Practices:**\n- Geben Sie `external_id` für zuverlässige Upsert-Operationen an\n- Verwenden Sie `region` oder `project_region_id` für die Projektregionszuordnung\n- Verwenden Sie `legal_entity_number` oder `legal_entity_id` für die Buchungskreis-Zuordnung\n- Fügen Sie vollständige Adressinformationen hinzu, wenn verfügbar, für besseres Projektmanagement\n- Übergeben Sie `latitude` und `longitude` gemeinsam, wenn der Standort bekannt ist\n- Stellen Sie sicher, dass Rollennamen in `project_invites` mit bestehenden Rollen in Ihrem Mandanten übereinstimmen\n","href":"/api-reference/projects-create"},{"title":"Benutzer zuweisen","openapi":"POST /projects/user-assignments","href":"/api-reference/projects-user-assignments"},{"title":"Projekt nach externer ID abrufen","openapi":"GET /projects/byExternalId/{external_id}","description":"**Erforderliche Berechtigungen:** `projects:read`\n","href":"/api-reference/projects-by-external-id"},{"title":"Projekt nach Projektnummer abrufen","openapi":"GET /projects/byProjectNumber/{project_number}","href":"/api-reference/projects-by-number"},{"title":"Projektkomponenten abrufen","openapi":"GET /projects/{id}/components","href":"/api-reference/projects-components"},{"title":"Kategorien abrufen","openapi":"GET /projects/{id}/work-types","href":"/api-reference/projects-work-types"},{"title":"Kategorien importieren","openapi":"POST /projects/{id}/work-types","href":"/api-reference/projects-work-types-upsert"},{"title":"SAP-Projekte erstellen","openapi":"POST /projects/sap","href":"/api-reference/projects-sap"}]},{"group":"Lieferungen","pages":[{"title":"Lieferungen auflisten","openapi":"GET /deliveries","href":"/api-reference/deliveries"},{"title":"Lieferung erstellen","openapi":"POST /deliveries","href":"/api-reference/deliveries-create"},{"title":"Lieferung aktualisieren","openapi":"PATCH /deliveries/{id}","href":"/api-reference/deliveries-patch"},{"title":"Lieferung nach ID abrufen","openapi":"GET /deliveries/{id}","href":"/api-reference/deliveries-by-id"},{"title":"Lieferkomponenten abrufen","openapi":"GET /deliveries/{id}/components","href":"/api-reference/deliveries-components-get"},{"title":"Lieferkomponenten ersetzen","openapi":"PUT /deliveries/{id}/components","href":"/api-reference/deliveries-components-put"},{"title":"Lieferschein-PDF abrufen","openapi":"GET /deliveries/{id}/pdf","href":"/api-reference/deliveries-pdf"},{"title":"Lieferschein-PDF hochladen","openapi":"POST /deliveries/pdf","href":"/api-reference/deliveries-pdf-upload"},{"title":"OpenTrans-Lieferung erstellen","openapi":"POST /deliveries/opentrans","href":"/api-reference/deliveries-opentrans"},{"title":"PAHM-Lieferung erstellen","openapi":"POST /deliveries/pahm","href":"/api-reference/deliveries-pahm"},{"title":"Eigene Lieferung erstellen","openapi":"POST /deliveries/custom","href":"/api-reference/deliveries-custom"}]},{"group":"Rechnungen","pages":[{"title":"Rechnungen auflisten","openapi":"GET /invoices","href":"/api-reference/invoices"},{"title":"Rechnung abrufen","openapi":"GET /invoices/{id}","href":"/api-reference/invoices-by-id"},{"title":"Rechnungspositionen abrufen","openapi":"GET /invoices/{id}/items","href":"/api-reference/invoices-items"},{"title":"Rechnungsverlauf abrufen","openapi":"GET /invoices/{id}/history","href":"/api-reference/invoices-history"},{"title":"Rechnungs-PDF abrufen","openapi":"GET /invoices/{id}/pdf","href":"/api-reference/invoices-pdf"},{"title":"DATEV-XML-Export abrufen","openapi":"POST /invoices/public/datev-export","href":"/api-reference/invoices-datev-export"},{"title":"Externen Rechnungsstatus setzen","openapi":"PATCH /invoices/{id}/external-status","href":"/api-reference/invoices-external-status"},{"title":"Rechnung verarbeiten (eigenes Format)","openapi":"POST /invoices/custom","href":"/api-reference/invoices-custom"},{"title":"Rechnung aus E-Mail verarbeiten","openapi":"POST /invoices/email","href":"/api-reference/invoices-email"},{"title":"SAP-Rechnungs-Rückmeldung","openapi":"POST /invoices/callback","href":"/api-reference/invoices-callback"}]},{"group":"Rechnungs-Dimensionen","pages":[{"title":"Rechnungs-Dimensionen (Custom Properties)","openapi":"GET /invoice-dimensions","href":"/api-reference/invoice-dimensions"},{"title":"Rechnungs-Dimension anlegen","openapi":"POST /invoice-dimensions","href":"/api-reference/invoice-dimensions-create"},{"title":"Rechnungs-Dimension aktualisieren","openapi":"PATCH /invoice-dimensions/{id}","href":"/api-reference/invoice-dimensions-update"},{"title":"Rechnungs-Dimension löschen","openapi":"DELETE /invoice-dimensions/{id}","href":"/api-reference/invoice-dimensions-delete"},{"title":"Dimension-Optionen abrufen","openapi":"GET /invoice-dimensions/{dimensionId}/options","href":"/api-reference/invoice-dimensions-options-list"},{"title":"Dimension-Optionen anlegen","openapi":"POST /invoice-dimensions/{dimensionId}/options","href":"/api-reference/invoice-dimensions-options-create"},{"title":"Dimension-Option aktualisieren","openapi":"PATCH /invoice-dimensions/options/{id}","href":"/api-reference/invoice-dimensions-options-update"},{"title":"Dimension-Option löschen","openapi":"DELETE /invoice-dimensions/options/{id}","href":"/api-reference/invoice-dimensions-options-delete"},{"title":"Dimensions-Zuweisungen einer Rechnung abrufen","openapi":"GET /invoice-dimensions/assignments/invoice/{invoiceId}","href":"/api-reference/invoice-dimensions-assignments-invoice-get"},{"title":"Header-Dimensions-Zuweisungen setzen","openapi":"POST /invoice-dimensions/assignments/invoice","href":"/api-reference/invoice-dimensions-assignments-invoice-set"},{"title":"Positions-Dimensions-Zuweisungen (Bulk) setzen","openapi":"POST /invoice-dimensions/assignments/line-item/bulk","href":"/api-reference/invoice-dimensions-assignments-line-item-bulk"},{"title":"Konto-Dimensions-Zuweisungen (Bulk) setzen","openapi":"POST /invoice-dimensions/assignments/account/bulk","href":"/api-reference/invoice-dimensions-assignments-account-bulk-set"},{"title":"Konto-Dimensions-Zuweisungen (Bulk) teilweise aktualisieren","openapi":"PATCH /invoice-dimensions/assignments/account/bulk","href":"/api-reference/invoice-dimensions-assignments-account-bulk-patch"},{"title":"Konto-Dimensions-Zuweisungen (ein Konto) setzen","openapi":"POST /invoice-dimensions/assignments/account","href":"/api-reference/invoice-dimensions-assignments-account-set"},{"title":"Dimensions-Zuweisung löschen","openapi":"DELETE /invoice-dimensions/assignments/{id}","href":"/api-reference/invoice-dimensions-assignments-delete"}]},{"group":"Lieferanten","pages":[{"title":"Lieferanten erstellen oder aktualisieren","openapi":"POST /suppliers","href":"/api-reference/suppliers"},{"title":"SAP-Lieferanten erstellen oder aktualisieren","openapi":"POST /suppliers/sap","href":"/api-reference/suppliers-sap"},{"title":"Lieferant Buchungskreisen zuordnen","openapi":"PUT /suppliers/{id}/legal-entities","href":"/api-reference/suppliers-legal-entities"}]},{"group":"Bestellungen","pages":[{"title":"Bestellungen erstellen","openapi":"POST /purchase-orders","href":"/api-reference/purchase-orders"},{"title":"SAP-Bestellungen erstellen","openapi":"POST /purchase-orders/sap","href":"/api-reference/purchase-orders-sap"}]},{"group":"Bestellungen (Lieferanten)","pages":[{"title":"Lieferantenbestellung aktualisieren","openapi":"PATCH /supplier-orders/{id}","href":"/api-reference/supplier-orders-patch"}]},{"group":"Stammdaten","pages":[{"title":"Konten auflisten","openapi":"GET /accounts","href":"/api-reference/accounts"},{"title":"Konten erstellen oder aktualisieren","openapi":"POST /accounts","href":"/api-reference/accounts-create"},{"title":"Zahlungsbedingungen auflisten","openapi":"GET /payment-terms","href":"/api-reference/payment-terms"},{"title":"Zahlungsbedingungen erstellen/aktualisieren","openapi":"POST /payment-terms","href":"/api-reference/payment-terms-upsert"},{"title":"Steuercodes auflisten","openapi":"GET /tax-codes","href":"/api-reference/tax-codes"},{"title":"Steuercodes erstellen/aktualisieren","openapi":"POST /tax-codes","href":"/api-reference/tax-codes-upsert"},{"title":"Buchungskreise auflisten","openapi":"GET /legal-entities","href":"/api-reference/company-codes"},{"title":"Buchungskreise erstellen/aktualisieren","openapi":"POST /legal-entities","href":"/api-reference/company-codes-upsert"},{"title":"Projektregionen auflisten","openapi":"GET /project-regions","href":"/api-reference/project-regions"},{"title":"Projektregionen erstellen/aktualisieren","openapi":"POST /project-regions","href":"/api-reference/project-regions-upsert"}]},{"group":"Q-Point Integration","pages":[{"title":"Q-Point-Lieferung erstellen","openapi":"POST /qpoint","href":"/api-reference/qpoint"},{"title":"Q-Point-PDF hochladen","openapi":"POST /qpoint/pdf","href":"/api-reference/qpoint-pdf"}]},{"group":"Workflows","pages":[{"title":"Workflow auslösen","openapi":"POST /workflows/trigger","href":"/api-reference/workflows-trigger"},{"title":"Workflow-Status abrufen","openapi":"GET /workflows/status/{external_id}","href":"/api-reference/workflows-status"},{"title":"Workflow-Status aktualisieren","openapi":"PUT /workflows/status/{external_id}","href":"/api-reference/workflows-status-update"}]},{"group":"Kalender","pages":[{"title":"Kalender-Abonnement","openapi":"GET /calendars/subscription","href":"/api-reference/calendars"}]},{"group":"IDS Aufträge","pages":[{"title":"IDS-Auftrag verarbeiten","openapi":"POST /ids/{order_id}","href":"/api-reference/ids-orders"}]}]}]},{"language":"en","pages":[{"title":"en","href":"/en/api-reference/projects-user-assignments"}]}]},"title":"Benutzer zuweisen - comstruct API Dokumentation","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}