{issued}

Fields reference

Every built-in field, every property, and how hidden metadata works. Consistent across all SDKs — the names and shapes below are the same on web, mobile, iframe, and HTML fallback.

System fields

These have built-in types and max-length validation. Use them by name to get the right label and input type for free.

NameTypeDefault labelMax lengthDefaults required?
subjecttextSubject200Yes
descriptiontextareaDescription5000Yes
emailemailEmail254No
nametextName100No
urlurlURL2048No
phonetelPhone20No

Field properties

Every field (system or custom) is configured with this shape:

PropertyTypeDescription
visiblebooleanShow the field in the form UI. Hidden fields still go through to the issue.
requiredbooleanOnly applies when visible: true. Enforced client-side and server-side.
valuestring | anyDefault for visible fields; the actual value for hidden fields.
labelstringOverride the field label in the UI.
placeholderstringPlaceholder text for visible inputs.
type'text' | 'email' | 'textarea' | 'url' | 'tel' | 'number' | 'select'Override the input type. Defaults to the type of the matching system field.
optionsstring[]Options list for type: "select" fields.
maxLengthnumberMax character count for text/textarea.
minLengthnumberMin character count for text/textarea.
patternstring (regex)Client-side validation pattern.
validationMessagestringMessage shown when validation fails.
js
fields: {
  subject: {
    visible: true,
    required: true,
    label: "What's up?",
    placeholder: "e.g. Can't submit my order",
    value: "Bug Report"
  },
  userId: {
    visible: false,
    value: currentUser.id
  }
}

Hidden metadata

Set visible: false with a value to attach context to every submission. The metadata shows up in the body of the created issue, so the engineer picking it up has what they need.

js
fields: {
  subject:     { visible: true, required: true },
  description: { visible: true, required: true },
  email:       { visible: false, value: currentUser.email },
  userId:      { visible: false, value: currentUser.id },
  plan:        { visible: false, value: currentUser.plan },
  appVersion:  { visible: false, value: APP_VERSION },
  pageUrl:     { visible: false, value: window.location.href },
  sessionId:   { visible: false, value: analytics.sessionId() }
}

Select fields

Render a dropdown by setting type: 'select' and providing options:

js
fields: {
  priority: {
    visible: true,
    required: true,
    type: 'select',
    label: 'Priority',
    options: ['Low', 'Normal', 'High', 'Blocker']
  }
}

Provider-specific fields

These are only read when your project targets the matching provider. A github_labels field is ignored on a Linear project, and vice versa.

GitHub
github_labels
Comma-separated GitHub label names (case-sensitive).
github_assignees
Comma-separated GitHub usernames. Must have write access to the repo.
github_milestone
GitHub milestone number.
js
github_labels:    { visible: false, value: "bug,customer" },
github_assignees: { visible: false, value: "johndoe" }
Linear
linear_labels
Comma-separated Linear label IDs(not names). Appended to the project's default labels, not replacing them.
js
linear_labels: {
  visible: false,
  value: "a1b2c3d4-...,e5f6g7h8-..."
}

More on Linear defaults in the Linear features guide.

Validation

  • Required visible fields must be non-empty at submit time.
  • Text and textarea fields enforce maxLength / minLength on both client and server.
  • Email fields are validated against a standard email regex.
  • Custom pattern regexes are client-side only — the server accepts the value as-is.
  • Intercept validation failures with the onValidationError callback.