{"record":{"id":"e5f61927a8ed9bce","repo":"twentyhq/twenty","slug":"createpartner-did-not-return-an-id","errorCode":null,"errorMessage":"createPartner did not return an id","messagePattern":"createPartner did not return an id","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/twenty-apps/internal/twenty-partners/src/modules/partner/application-intake/services/submit-partner-application.service.ts","lineNumber":47,"sourceCode":"\n    if (existingEdge && existingEdge.partner) {\n      const partnerId = existingEdge.partner.id;\n      await updatePartner(client, partnerId, partnerFields);\n      await updatePerson(client, existingEdge.id, {\n        name: { firstName: input.firstName.trim(), lastName: input.lastName.trim() },\n      });\n      return { ok: true, created: false, partnerId };\n    }\n\n    const companyId = await findOrCreateCompanyId(client, input);\n\n    const partnerResult = await createPartner(\n      client,\n      buildPartnerCreateData(partnerFields, input, companyId),\n    );\n    const partnerId = partnerResult.createPartner?.id;\n    if (partnerId === undefined) {\n      throw new Error('createPartner did not return an id');\n    }\n\n    if (existingEdge) {\n      await updatePerson(client, existingEdge.id, {\n        partnerId,\n        name: { firstName: input.firstName.trim(), lastName: input.lastName.trim() },\n      });\n    } else {\n      await createPerson(client, {\n        name: { firstName: input.firstName.trim(), lastName: input.lastName.trim() },\n        emails: { primaryEmail: email },\n        partnerId,\n        companyId,\n      });\n    }\n\n    return { ok: true, created: true, partnerId };\n  } catch (err) {","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/twentyhq/twenty/blob/1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6/packages/twenty-apps/internal/twenty-partners/src/modules/partner/application-intake/services/submit-partner-application.service.ts#L29-L65","documentation":"submitPartnerApplication asserts the createPartner mutation's returned id before linking a person to the new partner. An undefined partnerId means createPartner returned a null/id-less payload — the server rejected the insert without throwing (e.g. validation, permission, or a manifest-level constraint on Partner).","triggerScenarios":"createPartner returns { createPartner: null } or no id. Causes: caller lacks Partner create permission; a required partner field invalid; Partner metadata out of sync; the buildPartnerCreateData payload references an unknown companyId; a duplicate-partner guard on the server.","commonSituations":"Application for a partner whose email already maps to an existing partner (dedup edge case); role lacks Partner create; manifest changed Partner fields; companyId from findOrCreateCompanyId is stale/wrong.","solutions":["Inspect the raw createPartner response for null payload or errors array.","Confirm buildPartnerCreateData produced valid required fields and a valid companyId.","Verify the caller's role has Partner create permission and Partner is synced in metadata.","Reproduce createPartner in the GraphQL playground to read the server rejection."],"exampleFix":"// before\nconst partnerResult = await createPartner(client, buildPartnerCreateData(partnerFields, input, companyId));\nconst partnerId = partnerResult.createPartner?.id;\nif (partnerId === undefined) {\n  throw new Error('createPartner did not return an id');\n}\n\n// after — surface context\nconst partnerResult = await createPartner(client, buildPartnerCreateData(partnerFields, input, companyId));\nconst partnerId = partnerResult.createPartner?.id;\nif (partnerId === undefined) {\n  throw new Error(`createPartner did not return an id (email=${email}, companyId=${companyId}, result=${JSON.stringify(partnerResult)})`);\n}","handlingStrategy":"type-guard","validationCode":"function assertPartnerCreateData(data: Record<string, unknown>, companyId: string) {\n  if (!companyId) throw new Error('createPartner requires a valid companyId');\n  if (!data || Object.keys(data).length === 0) {\n    throw new Error('createPartner requires non-empty partner fields');\n  }\n}\nassertPartnerCreateData(buildPartnerCreateData(...), companyId);","typeGuard":"const hasCreatedPartnerId = (r: unknown): r is { createPartner: { id: string } } =>\n  typeof r === 'object' && r !== null &&\n  typeof (r as any).createPartner?.id === 'string';\n\nif (!hasCreatedPartnerId(partnerResult)) {\n  throw new Error(`createPartner returned no id: ${JSON.stringify(partnerResult)}`);\n}","tryCatchPattern":null,"preventionTips":["Confirm companyId from findOrCreateCompanyId is valid before building partner data.","Validate required partner fields are present before createPartner.","Always select and assert id on createPartner results.","Confirm Partner create permission and metadata sync."],"tags":["graphql","sdk","mutation","partners"],"backgroundTag":null,"analyzedSha":"1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6","analyzedAt":"2026-08-12T15:37:27.593Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}