# Add a contract to an existing customer Required Scopes: Endpoint: POST /v1/memberships/customers/{customerId}/add-membership Version: 1.27.0 Security: ApiKeyAuth ## Path parameters: - `customerId` (integer, required) ## Request fields (application/json): - `contractOfferTermId` (integer, required) Unique ID of the contract offer term Example: 1000 - `startDate` (string, required) The start date of the contract Example: "2026-02-01" - `preuseDate` (string) The pre use date of the contract. If not provided, it will be evaluated based on contract offer configuration. Example: "2026-01-01" - `notes` (string) The notes related to the contract Example: "Some notes" - `thirdPartyId` (string) Unique ID of the third party contract in the third party system Example: "1000a" - `employeeId` (integer) Unique ID of the employee who created the membership Example: 1239812733 - `referralCode` (string) Referral code to link with recruiter Example: "A500D" - `selectedSelectableModuleIds` (array) The selected modules from the available selectable modules - `selectedOptionalModuleIds` (array) The selected modules from the available optional modules - `initialPaymentRequestToken` (string) This token identifies a pre-authorized payment request. It acts as a reference to the payment session initiated by the user. It's not needed for preview endpoints. Example: "3JtyH5sakfn2V22vB0napNC2zWMlpFwS9gPQawuk7Jw1F00atOD0BA" - `contractSignature` (object) The signature SVG for the contract document - `contractSignature.base64SvgSignature` (string, required) Customer confirmation signature SVG value as base 64 string - `legalRepresentative` (object) The legal representative information used for add-membership and membership preview requests. For the customer signup request, the top-level legalRepresentative field remains the primary field and this contract field is only used as a fallback. - `legalRepresentative.type` (string, required) Type of the legal representative Enum: "EXTERNAL_PERSON", "EXISTING_CUSTOMER" - `legalRepresentative.person` (object) External person data used when type is EXTERNAL_PERSON - `legalRepresentative.person.firstName` (string, required) First name of the legal representative Example: "Erika" - `legalRepresentative.person.secondFirstName` (string) Second first name of the legal representative Example: "Maria" - `legalRepresentative.person.lastName` (string, required) Last name of the legal representative Example: "Mustermann" - `legalRepresentative.person.secondLastName` (string) Second last name of the legal representative Example: "Meyer" - `legalRepresentative.person.dateOfBirth` (string) Date of birth of the legal representative Example: "1985-08-24" - `legalRepresentative.person.placeOfBirth` (string) Place of birth of the legal representative Example: "Hamburg" - `legalRepresentative.person.countryOfBirth` (string) Country of birth of the legal representative Example: "DE" - `legalRepresentative.person.gender` (string) Gender of the legal representative Enum: "MALE", "FEMALE", "UNISEX" - `legalRepresentative.person.email` (string) Email address of the legal representative Example: "legal.rep@example.com" - `legalRepresentative.person.phoneNumberPrivate` (string) Private phone number of the legal representative Example: "+44123456789" - `legalRepresentative.person.phoneNumberMobile` (string) Mobile phone number of the legal representative Example: "+44987654321" - `legalRepresentative.person.street` (string, required) Street of the legal representative address Example: "Raboisen Street" - `legalRepresentative.person.houseNumber` (string) House number of the legal representative address Example: "3-4" - `legalRepresentative.person.additionalAddressInformation` (string) Additional address information of the legal representative Example: "2nd floor" - `legalRepresentative.person.city` (string, required) City of the legal representative address Example: "Hamburg" - `legalRepresentative.person.zipCode` (string, required) Zip code of the legal representative address Example: "220-99" - `legalRepresentative.person.countryCode` (string, required) Country code of the legal representative address Example: "DE" - `legalRepresentative.customerId` (integer) Customer id used when type is EXISTING_CUSTOMER Example: 98765 - `legalRepresentative.singleParent` (boolean) Whether the provided legal representative is the only legal guardian Example: true - `legalRepresentative.addressToLiablePerson` (boolean) Whether communication and billing should be sent to the legal representative - `legalRepresentative.legalRepresentativeSignature` (object) The first legal representative signature SVG for the contract document Example: {"base64SvgSignature":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLz4="} - `legalRepresentative.legalRepresentativeSignatureSecondPerson` (object) The second legal representative signature SVG for the contract document Example: {"base64SvgSignature":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLz4="} - `textBlockSignatures` (array) Signatures for text blocks - `textBlockSignatures.base64SvgSignature` (string, required) Text block's signature SVG value as base 64 string - `textBlockSignatures.textBlockId` (integer, required) The ID of the referenced text block of the signature - `voucherCode` (string) An optional code for a voucher. Only credit and discount vouchers are supported. Example: 123 ## Response 400 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST" ## Response 401 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST" ## Response 403 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST" ## Response 404 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST" ## Response 409 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST" ## Response 429 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST" ## Response 500 fields (application/json): - `errorMessage` (string, required) Resolved message in the context-specific default locale - `errorCode` (string) Key for translation files - `traceId` (string) Datadog trace id - `reference` (string) Reference to validation error Example: "parent.child" - `args` (array) Arguments referenced by format specifiers while resolving the message from translation files - `typedArgs` (array) Same as but with type information - `typedArgs.value` (object) - `typedArgs.type` (string) Enum: "TIMESTAMP", "BOOLEAN", "DATE", "MONTH_DAY", "TIME", "TERM", "TERM_LIST", "INTEGER", "DECIMAL", "STRING", "MONEY", "LIMITABLE_CONFIG_PROPERTY", "I18N_KEY", "I18N_KEY_LIST", "PERMISSION_LIST", "ENUM", "AVAILABILITY_LIST"