This documentation is currently under development. Certain sections are not yet complete and will be added shortly.
For the complete documentation index, see llms.txt. This page is also available as Markdown.

Enrolment Forms

List enrolment forms for the tenant

get
/api/{tenantId}/admin/enrolmentForms

Returns every customerRegistration layout of the tenant, ordered by name, with enough of each form to render a list without reading them one by one.

Layout files that cannot be parsed are left out: their type is precisely what cannot be read, so there is no way to tell whether they are enrolment forms. Reading one by name still reports it.

Authorization

Requires tenant.configuration.enrolment:read scope.

Required scopes
This endpoint requires the following scopes:
Authorizations
OAuth2implicitRequired
Authorization URL:
Path parameters
tenantIdstringRequired
Responses
200

Enrolment forms returned.

Enrolment form returned by the list endpoint.

namestringRequired

Name of the form, unique within the tenant, and the last segment of its public URL.

flowstring · nullableOptional

Flow executed when a customer registers through this form. Null when the stored form has none.

localeResourceCountinteger · int32Required

Number of locale resource directories the form pulls its translations from.

hasFormbooleanRequired

Whether the form declares any fields to fill in.

get/api/{tenantId}/admin/enrolmentForms
GET /api/{tenantId}/admin/enrolmentForms HTTP/1.1
Host: app.neostore.cloud
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
200

Enrolment forms returned.

[
  {
    "name": "text",
    "flow": null,
    "localeResourceCount": 1,
    "hasForm": true
  }
]

Create an enrolment form

post
/api/{tenantId}/admin/enrolmentForms

Writes a new layouts/{name}.yml. The name must be one the tenant configuration validator accepts, so a new form cannot be the reason validation starts failing.

Authorization

Requires tenant.configuration.enrolment:write scope.

Required scopes
This endpoint requires the following scopes:
Authorizations
OAuth2implicitRequired
Authorization URL:
Path parameters
tenantIdstringRequired
Body

Request body to create an enrolment form.

namestring · min: 1Required

Name of the form. Must contain only letters, digits, hyphens or underscores, from 1 to 50 characters, because it becomes a file name and a public URL segment.

flowstring · nullableOptional

Flow executed when a customer registers through this form. Required unless yaml is used, in which case the flow is read from it.

yamlstring · nullableOptional

Complete file to store, verbatim. Mutually exclusive with flow and localization.

Responses
201

Enrolment form created.

Full definition of an enrolment form, returned by the get/create/save endpoints.

namestringRequired

Name of the form.

flowstring · nullableOptional

Flow executed when a customer registers through this form. Null when the stored form has none — which the form needs to work, so writing it back through this API requires one.

yamlstringRequired

The stored file, verbatim.

post/api/{tenantId}/admin/enrolmentForms
POST /api/{tenantId}/admin/enrolmentForms HTTP/1.1
Host: app.neostore.cloud
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 77

{
  "name": "text",
  "flow": null,
  "localization": {
    "resources": [
      "text"
    ]
  },
  "yaml": null
}
{
  "name": "text",
  "flow": null,
  "localization": {
    "resources": [
      "text"
    ]
  },
  "yaml": "text"
}

Get an enrolment form

get
/api/{tenantId}/admin/enrolmentForms/{name}

Returns the modelled properties of the form together with the stored file verbatim in yaml, so a caller can render a form editor and a YAML editor from one request.

Authorization

Requires tenant.configuration.enrolment:read scope.

Required scopes
This endpoint requires the following scopes:
Authorizations
OAuth2implicitRequired
Authorization URL:
Path parameters
namestringRequired
tenantIdstringRequired
Responses
200

Enrolment form returned.

Full definition of an enrolment form, returned by the get/create/save endpoints.

namestringRequired

Name of the form.

flowstring · nullableOptional

Flow executed when a customer registers through this form. Null when the stored form has none — which the form needs to work, so writing it back through this API requires one.

yamlstringRequired

The stored file, verbatim.

get/api/{tenantId}/admin/enrolmentForms/{name}
GET /api/{tenantId}/admin/enrolmentForms/{name} HTTP/1.1
Host: app.neostore.cloud
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
  "name": "text",
  "flow": null,
  "localization": {
    "resources": [
      "text"
    ]
  },
  "yaml": "text"
}

Save an enrolment form

put
/api/{tenantId}/admin/enrolmentForms/{name}

Replaces the form identified by name. The name in the route is authoritative and the form cannot be renamed.

A form whose stored YAML no longer parses can only be saved through yaml, which replaces the whole file — the typed path has nothing it can safely merge into.

Authorization

Requires tenant.configuration.enrolment:write scope.

Required scopes
This endpoint requires the following scopes:
Authorizations
OAuth2implicitRequired
Authorization URL:
Path parameters
tenantIdstringRequired
namestringRequired
Body

Request body to save an existing enrolment form.

flowstring · nullableOptional

Flow executed when a customer registers through this form. Required unless yaml is used.

yamlstring · nullableOptional

Complete file to store, verbatim. Mutually exclusive with flow and localization.

Responses
200

Enrolment form saved.

Full definition of an enrolment form, returned by the get/create/save endpoints.

namestringRequired

Name of the form.

flowstring · nullableOptional

Flow executed when a customer registers through this form. Null when the stored form has none — which the form needs to work, so writing it back through this API requires one.

yamlstringRequired

The stored file, verbatim.

put/api/{tenantId}/admin/enrolmentForms/{name}
PUT /api/{tenantId}/admin/enrolmentForms/{name} HTTP/1.1
Host: app.neostore.cloud
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 63

{
  "flow": null,
  "localization": {
    "resources": [
      "text"
    ]
  },
  "yaml": null
}
{
  "name": "text",
  "flow": null,
  "localization": {
    "resources": [
      "text"
    ]
  },
  "yaml": "text"
}

Delete an enrolment form

delete
/api/{tenantId}/admin/enrolmentForms/{name}

Removes layouts/{name}.yml.

This breaks live links, and the API cannot tell you which

A form is served publicly at /{tenantId}/{name}. That URL is what gets printed on QR codes, embedded in campaigns and handed to partners, and short links created by the redirect engine resolve to it by name at request time — from the redirect store, not from the configuration. So there is no way for this endpoint to enumerate what points at the form: deleting it starts returning 404 to traffic that is already in the wild, and re-creating a form under the same name is the only way back.

Callers must warn explicitly and name the form before calling this. The one class of reference that can be checked is other layouts using the form as their errorLayoutName; that is refused with a conflict rather than silently breaking them.

Locale resource directories are left alone: they are shared between forms, so removing one form must not take another form's translations with it.

Authorization

Requires tenant.configuration.enrolment:write scope.

Required scopes
This endpoint requires the following scopes:
Authorizations
OAuth2implicitRequired
Authorization URL:
Path parameters
tenantIdstringRequired
namestringRequired
Responses
204

Enrolment form deleted. Its public URL now returns 404.

No content

delete/api/{tenantId}/admin/enrolmentForms/{name}
DELETE /api/{tenantId}/admin/enrolmentForms/{name} HTTP/1.1
Host: app.neostore.cloud
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*

No content

Last updated