Mountly

Documentation

Guides and public API reference

Public API

OpenAPI 1.0.0

API reference for Mountly

Use the documentation below to get started and learn how our API works.

Base URL

https://beta.mountly.io

Version

1.0.0

Open raw OpenAPI spec

Get started

The Mountly API provides programmatic access to your forms and submission data. This makes it easy to build integrations and workflows outside of the Mountly dashboard.

To verify your setup quickly, start with one of these calls:

  • GET /forms to confirm authenticated access and retrieve a list of your forms.
  • GET /entries to review submissions for a specific form.

For details on how to authenticate with the API, refer to the Authentication section. If you need to manage access tokens in the dashboard, see the guides for creating tokens, revoking tokens, and deleting tokens.

Authentication

The Mountly API uses bearer tokens to authenticate requests. You can obtain a token from your workspace settings.

To authenticate an API request, include the token in the Authorization header:

Authorization: Bearer <YOUR_ACCESS_TOKEN>

Store the access token in a secure location, such as a secret manager or an environment variable. API requests should be made from a trusted server-side environment.

Token management

Before making a request, ensure that:

  • The token has the necessary permissions for the intended action.
  • Scoped tokens are configured for the correct form.
  • The token is not expired or revoked.

If a token is compromised, revoke it immediately and generate a new one.

For more detailed instructions on managing tokens within the dashboard, refer to the guides on creating, revoking, and deleting access tokens.

Error handling

The Mountly API returns structured error messages to help you distinguish between invalid input, authentication problems, and temporary server failures. Understanding these errors will help you build more robust integrations.

The API uses two primary error schemas:

  • ProblemDetails for general API failures such as access issues or other non-validation errors.
  • HttpValidationProblemDetails when a request payload or field values fail validation.

Refer to the published schema cards below for the exact fields in each schema.

Error handling strategies

Here's how to handle the most common error categories:

Error TypeCommon CauseRecommended Action
Authentication/AccessThe provided token is missing, expired, or lacks the necessary permissions.Do not retry. Correct the credentials or permissions before making a new request.
Validation ErrorsThe request payload does not conform to the expected format or contains invalid data.Do not retry. Surface the field-level validation errors, correct the payload, and then submit a new request.
Transient FailuresA temporary network issue or a brief problem on our end interrupted the request.Log the failure. You may retry the request, but use exponential backoff to avoid overwhelming the service.

Error schemas

Published error models

ProblemDetailsProblemDetails

Fields

typenullable

string

titlenullable

string

statusnullable

integer

detailnullable

string

instancenullable

string

extensions

Record<string, unknown>

API endpoints

Endpoint reference

Form Entries

3 endpoints

GET/entries_listFormEntries

List form entries

List form-entries from a specific form using basic pagination.

Access

Bearer token required

Request

No request body

Success

200

Parameters

3 parameters

Parameters

id

string

pageNumber

integer

pageSize

integer

Responses

3 responses

200
application/jsonListFormEntriesResponse

Fields

entries

FormEntry[]

metadata

PaginationMetadata

Related models
FormEntryFormEntry

Fields

id

string

formId

string

data

Record<string, string>

createdAt

string (date-time)

updatedAt

string (date-time)

PaginationMetadataPaginationMetadata

Contains pagination metadata

Fields

currentPage

integer

The current 1-index based page index. First page is one (1) not zero (0)!

pageSize

integer

The amount of records on this page.

pageCount

integer

Total available of pages

totalEntries

integer

Total available records

isLastPage

boolean

Indicates if this is the last page or not

isFirstPage

boolean

Indicates if this is the first page or not

hasNextPage

boolean

Indicates whether a next page is available or not

hasPreviousPage

boolean

Indicates whether a previous page is available or not

401
404

cURL

bash
curl --request GET \
  --url 'https://beta.mountly.io/entries?id=<id>&pageNumber=<pageNumber>&pageSize=<pageSize>' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>'

200 response

json
{
  "entries": [
    null
  ],
  "metadata": {
    "currentPage": null,
    "pageSize": null,
    "pageCount": null,
    "totalEntries": null,
    "isLastPage": null,
    "isFirstPage": null,
    "hasNextPage": null,
    "hasPreviousPage": null
  }
}
PATCH/entries_updateFormEntry

Update a form entry

Update the content of a single form-entry.

Access

Bearer token required

Request

application/json required

Success

200

Parameters

No path or query parameters

Request body

1 content type

application/jsonUpdateFormEntryrequired

Request for updating a form entry

Fields

formId

string

The ID of the form to update

formEntryId

string

ID of the form-entry to update

data

Record<string, string>

Updated form-entry data, cannot be empty or null

Responses

4 responses

200
400
application/jsonProblemDetails

Fields

typenullable

string

titlenullable

string

statusnullable

integer

detailnullable

string

instancenullable

string

extensions

Record<string, unknown>

401
404

cURL

bash
curl --request PATCH \
  --url 'https://beta.mountly.io/entries' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "formId": "<string>",
    "formEntryId": "<string>",
    "data": {
      "key": "<string>"
    }
  }'

UpdateFormEntry example

json
{
  "formId": "<string>",
  "formEntryId": "<string>",
  "data": {
    "key": "<string>"
  }
}

400 response

json
{
  "key": null
}
DELETE/entries_deleteFormEntry

Delete form entries

Allows deletion of selected form-entries from a form.

Access

Bearer token required

Request

application/json required

Success

200

Parameters

No path or query parameters

Request body

1 content type

application/jsonDeleteFormEntryrequired

Request for deleting a defined set of form-entries.

Fields

id

string

The ID of the form to delete entries from

formEntryIds

string[]

Array of form-entry IDs to be deleted

Responses

4 responses

200
400
application/jsonProblemDetails

Fields

typenullable

string

titlenullable

string

statusnullable

integer

detailnullable

string

instancenullable

string

extensions

Record<string, unknown>

401
404

cURL

bash
curl --request DELETE \
  --url 'https://beta.mountly.io/entries' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "id": "<string>",
    "formEntryIds": [
      "<string>"
    ]
  }'

DeleteFormEntry example

json
{
  "id": "<string>",
  "formEntryIds": [
    "<string>"
  ]
}

400 response

json
{
  "key": null
}

Forms

4 endpoints

GET/forms_listForms

List forms

List all forms owned by the authenticated user.

Access

Bearer token required

Request

No request body

Success

200

Parameters

No path or query parameters

Responses

2 responses

200
application/jsonListFormsResponse

Fields

forms

Form[]

Related models
FormForm

Fields

id

string

ownerId

string

name

string

descriptionnullable

string

redirectUrlnullable

string

notificationSettings

FormNotificationSettings

acceptedSubmissionCount

integer

state

FormState

createdAt

string (date-time)

FormNotificationSettingsFormNotificationSettings

Fields

mode

FormNotificationMode

submissionIntervalnullable

integer

recipientEmailnullable

string

FormStateFormState

Represents the current forms state

401

cURL

bash
curl --request GET \
  --url 'https://beta.mountly.io/forms' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>'

200 response

json
{
  "forms": [
    null
  ]
}
POST/forms_createForm

Create a form

Create a new form for the authenticated user.

Access

Bearer token required

Request

application/json required

Success

200

Parameters

No path or query parameters

Request body

1 content type

application/jsonCreateFormrequired

Fields

name

string

redirectUrlnullable

string

descriptionnullable

string

notificationModenullable

FormNotificationMode

notificationSubmissionIntervalnullable

integer

notificationRecipientEmailnullable

string

Related models
FormNotificationModeFormNotificationMode

Responses

4 responses

200
application/jsonCreateFormResponse

Fields

form

Form

Related models
FormForm

Fields

id

string

ownerId

string

name

string

descriptionnullable

string

redirectUrlnullable

string

notificationSettings

FormNotificationSettings

acceptedSubmissionCount

integer

state

FormState

createdAt

string (date-time)

FormNotificationSettingsFormNotificationSettings

Fields

mode

FormNotificationMode

submissionIntervalnullable

integer

recipientEmailnullable

string

FormStateFormState

Represents the current forms state

400
application/jsonProblemDetails

Fields

typenullable

string

titlenullable

string

statusnullable

integer

detailnullable

string

instancenullable

string

extensions

Record<string, unknown>

401
403

cURL

bash
curl --request POST \
  --url 'https://beta.mountly.io/forms' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "name": "<string>",
    "redirectUrl": "<string>",
    "description": "<string>",
    "notificationMode": null,
    "notificationSubmissionInterval": 123,
    "notificationRecipientEmail": "<string>"
  }'

CreateForm example

json
{
  "name": "<string>",
  "redirectUrl": "<string>",
  "description": "<string>",
  "notificationMode": null,
  "notificationSubmissionInterval": 123,
  "notificationRecipientEmail": "<string>"
}

200 response

json
{
  "form": {
    "id": null,
    "ownerId": null,
    "name": null,
    "description": null,
    "redirectUrl": null,
    "notificationSettings": null,
    "acceptedSubmissionCount": null,
    "state": null,
    "createdAt": null
  }
}
PATCH/forms_updateForm

Update a form

Update a form owned by the authenticated user.

Access

Bearer token required

Request

application/json required

Success

200

Parameters

No path or query parameters

Request body

1 content type

application/jsonUpdateFormrequired

Fields

id

string

name

string

redirectUrlnullable

string

descriptionnullable

string

notificationMode

FormNotificationMode

notificationSubmissionIntervalnullable

integer

notificationRecipientEmailnullable

string

Related models
FormNotificationModeFormNotificationMode

Responses

4 responses

200
application/jsonUpdateFormResponse

Fields

form

Form

Related models
FormForm

Fields

id

string

ownerId

string

name

string

descriptionnullable

string

redirectUrlnullable

string

notificationSettings

FormNotificationSettings

acceptedSubmissionCount

integer

state

FormState

createdAt

string (date-time)

FormNotificationSettingsFormNotificationSettings

Fields

mode

FormNotificationMode

submissionIntervalnullable

integer

recipientEmailnullable

string

FormStateFormState

Represents the current forms state

400
application/jsonProblemDetails

Fields

typenullable

string

titlenullable

string

statusnullable

integer

detailnullable

string

instancenullable

string

extensions

Record<string, unknown>

401
404

cURL

bash
curl --request PATCH \
  --url 'https://beta.mountly.io/forms' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "id": "<string>",
    "name": "<string>",
    "redirectUrl": "<string>",
    "description": "<string>",
    "notificationMode": "Disabled",
    "notificationSubmissionInterval": 123,
    "notificationRecipientEmail": "<string>"
  }'

UpdateForm example

json
{
  "id": "<string>",
  "name": "<string>",
  "redirectUrl": "<string>",
  "description": "<string>",
  "notificationMode": "Disabled",
  "notificationSubmissionInterval": 123,
  "notificationRecipientEmail": "<string>"
}

200 response

json
{
  "form": {
    "id": null,
    "ownerId": null,
    "name": null,
    "description": null,
    "redirectUrl": null,
    "notificationSettings": null,
    "acceptedSubmissionCount": null,
    "state": null,
    "createdAt": null
  }
}
DELETE/forms_deleteForm

Delete a form

Delete a form owned by the authenticated user.

Access

Bearer token required

Request

application/json required

Success

200

Parameters

No path or query parameters

Request body

1 content type

application/jsonDeleteFormrequired

Fields

id

string

Responses

4 responses

200
400
application/jsonProblemDetails

Fields

typenullable

string

titlenullable

string

statusnullable

integer

detailnullable

string

instancenullable

string

extensions

Record<string, unknown>

401
404

cURL

bash
curl --request DELETE \
  --url 'https://beta.mountly.io/forms' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "id": "<string>"
  }'

DeleteForm example

json
{
  "id": "<string>"
}

400 response

json
{
  "key": null
}