publ betaReference (MCP guide)
Open publ console

Change sign-up form requirements

# Change sign-up form requirements

Use screen `channel.signup-form` to read and change what a selected channel asks members to provide. [Get](../tools/publ_signup_form_get.md) returns definitions and state; [apply](../tools/publ_signup_form_apply.md) merges requested changes into one full-form save. This workflow does not register a publ account or read/edit member answers.

## Read, plan and save

1. Resolve the intended channel through authorized discovery or its bound hosted resource. Use a selected-channel OWNER credential or DELEGATEE credential with `MANAGE_CHANNEL_PUBLIC_SETTING`; the separate CHANNEL_MANAGEMENT origin must be configured.
2. Read the form. Require `canApply:true`; investigate `missingKeys` when false. Pick keys from the returned definitions, preserving the returned revision.
3. Explain the intended collection changes, including the possible effect on existing members. A custom question being enabled needs a valid name; three essential fields cannot change.
4. Plan with a stable request ID and `dryRun:true`. For a new request inspect `writeNeeded`, planned fields and `writesPerformed:false`.
5. Submit the same business inputs with `dryRun:false`. A new dry run creates no recoverable job. Require `SIGNUP_FORM_APPLIED` and inspect `verification`, then use get for a fresh observation when needed.

Read:

```json
{"channelCode":"selected-channel-code"}
```

Plan two custom questions, making only the first mandatory:

```json
{"requestId":"signup-questions-example-001","channelCode":"selected-channel-code","expectedRevision":"0000000000000000000000000000000000000000000000000000000000000000","changes":[{"key":"profile_add_info_custom_1","enabled":true,"required":true,"name":"Preferred workshop"},{"key":"profile_add_info_custom_2","enabled":true,"required":false,"name":"Additional interests"}],"dryRun":true}
```

The channel and zero revision are placeholders; replace them from get. These are illustrative inputs, not execution evidence. Only perform the real save within the user's requested scope.

## Understand defaults and preservation

There are 47 displayed definitions: three locked essential fields, 39 fixed questions and five custom slots. An exactly empty server array receives initial screen defaults for the 44 editable fields: disabled, not required, custom names blank. Get labels those values `empty-form-screen-default` and writes nothing. A partially missing nonempty array is not repaired; missing values remain null and saving is blocked.

`required:true` enables; `enabled:false` clears required. Setting both disabled and required is invalid. `required:false` alone leaves collection enabled if it already was. Omitting a property preserves it. Only the five custom slots accept `name`; explicit names are trimmed and normally need 2–100 characters, while an inactive slot can be cleared with an empty string. Existing unchanged names are retained.

Apply sends all 44 editable fields after merging the requested changes. It does not send essential fields or member answers. Disabling or renaming a question does not delete answers or prove recollection. A successful full-form readback proves stored settings only; there is no atomic concurrency lock or automatic rollback.

## Recover the original request

After a real request returns a task ID, inspect it with `task_status`:

```json
{"taskId":"signup-questions-example-001","taskType":"signup-form"}
```

Use the same ID/type with `task_resume` only to continue the original authorized change. `prepared` may perform a remaining write after a fresh comparison. `sent` only reconciles the saved target; it does not repeat an uncertain PUT. `done` returns historical completion. Do not omit `taskType`, regenerate the request ID to bypass uncertainty, or assume status is a fresh get. The [apply reference](../tools/publ_signup_form_apply.md#recovery-and-failures) explains phase and error details.

Resolved successful calls provide one console destination at `/channels/{encodedChannelCode}/publish/sign-up-form`, with the same legacy `consoleUrl` alias. Existing-job dry runs and task status cannot infer a fresh target link from saved data. A URL is a navigation reference, not proof that the browser reached the API environment.

## Field keys

Use get's returned keys and state before editing. Labels here are English summaries; the tool also preserves quoted original UI labels. These data types/formats describe questions, not member-answer mutation inputs.

| Key | Label | Category | Data type / format |
| --- | --- | --- | --- |
| `essential_info_email` | Email | ESSENTIAL | email / normal |
| `essential_info_nick_name` | Nickname | ESSENTIAL | string / normal |
| `essential_info_country` | Country | ESSENTIAL | enum / country |
| `profile_add_info_personal_name` | Name | PERSONAL | string / normal |
| `profile_add_info_personal_gender` | Gender | PERSONAL | enum / gender |
| `profile_add_info_personal_birth_year` | Birth year | PERSONAL | birth_date / YYYY |
| `profile_add_info_personal_birth_month` | Birth month | PERSONAL | birth_date / MM |
| `profile_add_info_personal_birth_day` | Birth day | PERSONAL | birth_date / DD |
| `profile_add_info_contact_address` | Home address | CONTACT | address / normal |
| `profile_add_info_contact_email` | Personal email address | CONTACT | email / normal |
| `profile_add_info_contact_mobile_number` | Mobile phone number | CONTACT | phone_number / normal |
| `profile_add_info_contact_phone_number` | Home phone number | CONTACT | phone_number / normal |
| `profile_add_info_shipping_name` | Recipient name | SHIPPING | string / normal |
| `profile_add_info_shipping_mobile_number` | Recipient phone number | SHIPPING | phone_number / normal |
| `profile_add_info_shipping_address` | Shipping address | SHIPPING | address / normal |
| `profile_add_info_workplace_company_name` | Workplace name | WORKPLACE | string / normal |
| `profile_add_info_workplace_department_name` | Department name | WORKPLACE | string / normal |
| `profile_add_info_workplace_name` | Name | WORKPLACE | string / normal |
| `profile_add_info_workplace_position` | Job title | WORKPLACE | string / normal |
| `profile_add_info_workplace_email` | Work email address | WORKPLACE | email / normal |
| `profile_add_info_workplace_phone_number` | Work phone number | WORKPLACE | phone_number / normal |
| `profile_add_info_workplace_address` | Work address | WORKPLACE | address / normal |
| `profile_add_info_biz_company_name` | Company name | BIZ | string / normal |
| `profile_add_info_biz_ceo_name` | Business representative name | BIZ | string / normal |
| `profile_add_info_biz_type` | Business type | BIZ | enum / biz_type |
| `profile_add_info_biz_registration_number` | Business registration number | BIZ | string / normal |
| `profile_add_info_biz_establishment` | Business opening date | BIZ | date / YYYY-MM-DD |
| `profile_add_info_biz_category` | Business category | BIZ | string / normal |
| `profile_add_info_biz_sector` | Business activity | BIZ | string / normal |
| `profile_add_info_biz_location` | Business location | BIZ | string / normal |
| `profile_add_info_biz_email` | Business email address | BIZ | email / normal |
| `profile_add_info_biz_contact_name` | Contact person name | BIZ | string / normal |
| `profile_add_info_biz_contact_mobile_number` | Contact person phone number | BIZ | phone_number / normal |
| `profile_add_info_biz_contact_email` | Contact person email address | BIZ | email / normal |
| `profile_add_info_etc_website` | Website or blog URL | ETC | url / normal |
| `profile_add_info_etc_education` | Education | ETC | enum / education |
| `profile_add_info_etc_interests` | Hobbies/interests | ETC | enum / interest |
| `profile_add_info_etc_marital` | Marital status | ETC | enum / marital |
| `profile_add_info_etc_children` | Number of children | ETC | string / normal |
| `profile_add_info_etc_sns` | Social media account | ETC | sns / sns |
| `profile_add_info_etc_referrer` | Referrer | ETC | string / normal |
| `profile_add_info_etc_referrer_code` | Referral code | ETC | string / normal |
| `profile_add_info_custom_1` | Additional information 1 | CUSTOM | string / normal |
| `profile_add_info_custom_2` | Additional information 2 | CUSTOM | string / normal |
| `profile_add_info_custom_3` | Additional information 3 | CUSTOM | string / normal |
| `profile_add_info_custom_4` | Additional information 4 | CUSTOM | string / normal |
| `profile_add_info_custom_5` | Additional information 5 | CUSTOM | string / normal |

See [common results](../reference/results.md) for navigation and recovery conventions.

## Saved record identity

Existing apply/dry-run calls and task status/resume require both the saved task ID
and saved input requestId to match the requested ID. A mismatching or malformed
saved identity returns `TASK_STATE_UNVERIFIED` before workflow context or business
reads. Preserve the original record for inspection; do not rename/edit it, try
its embedded ID or create a replacement request to bypass the error. No record
is repaired or resent. Matching records retain their existing recovery and
freshness checks; this rule does not convert them into universally read-only calls.