Skip to content
Kintsu

API

With the API of Kintsu, your own software works with the data of your organization.

An owner or admin makes an API key in the settings of the organization, under API keys. Send it with every request:

curl https://app.kintsu.be/api/v1/whoami \
  -H "Authorization: Bearer <key>"

The OpenAPI description lists every endpoint, for tools that make a client from it.

Platform

GET/whoami

The organization, the key and its rights

Shows who the key works for. Every valid key may call it.

Answer (200)

{
  "type": "object",
  "properties": {
    "organization": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "name",
        "slug"
      ],
      "additionalProperties": false
    },
    "key": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "name"
      ],
      "additionalProperties": false
    },
    "permissions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "organization",
    "key",
    "permissions"
  ],
  "additionalProperties": false
}

Sites

GET/sites

The sites of the company

Needs the right `site.read`.

Answer (200)

{
  "type": "object",
  "properties": {
    "sites": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "slug",
          "name",
          "status",
          "address",
          "languages"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "sites"
  ],
  "additionalProperties": false
}

GET/sites/{site}/collections

The collections of a site, with their fields

Needs the right `site.read`.

Parameters
NameWhereRequired
sitepathYes

Answer (200)

{
  "type": "object",
  "properties": {
    "collections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "singular": {
            "type": "string"
          },
          "instructions": {
            "type": "string"
          },
          "publishOnSave": {
            "type": "boolean"
          },
          "items": {
            "type": "number"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "label": {},
                "required": {
                  "type": "boolean"
                },
                "localized": {
                  "type": "boolean"
                },
                "options": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "collection": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "type",
                "label",
                "required",
                "localized"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "slug",
          "name",
          "singular",
          "publishOnSave",
          "items",
          "fields"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "collections"
  ],
  "additionalProperties": false
}

GET/sites/{site}/collections/{collection}/items

The items of a collection, a page at a time

Filter with `filter` (JSON: `[{"field":"type","op":"eq","value":"huis"}]`, ops eq, ne, in, contains, gt, lt, set; field `$slug` for the slug), or on `externalId`. Sort on a field, `$rank`, `$updated` or `$created`, with `-` in front for descending. At most 100 per page; `next` is the cursor of the next page. Needs the right `site.read`.

Parameters
NameWhereRequired
sitepathYes
collectionpathYes
statusqueryNo
localequeryNo
filterqueryNo
sortqueryNo
externalIdqueryNo
updatedSincequeryNo
limitqueryNo
cursorqueryNo

Answer (200)

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "key": {
            "type": "string",
            "description": "collection/slug"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published",
              "bin"
            ]
          },
          "changed": {
            "type": "boolean",
            "description": "The draft differs from what is online."
          },
          "externalId": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "values": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {},
            "description": "By field name, in the language asked."
          },
          "online": {
            "anyOf": [
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "type": "number"
          },
          "updatedAt": {
            "type": "string"
          },
          "publishedAt": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "key",
          "status",
          "changed",
          "externalId",
          "slug",
          "values",
          "version",
          "updatedAt",
          "publishedAt"
        ],
        "additionalProperties": false
      }
    },
    "next": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "items",
    "next"
  ],
  "additionalProperties": false
}

POST/sites/{site}/collections/{collection}/items

Adds an item, as a draft or online at once

Within the items of the plan. With `publish: true` it goes online right away; a collection that publishes on save does so anyway. Needs the right `content.edit`.

Parameters
NameWhereRequired
sitepathYes
collectionpathYes
idempotency-keyheaderNo

Body of the request

{
  "type": "object",
  "properties": {
    "values": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {},
      "description": "By field name. Rich text as { \"markdown\": \"…\" }; an image { \"asset\": \"<id>\" } or { \"url\": \"https://…\" }; a reference collection/slug; a link \"/contact\" or \"https://…\"."
    },
    "slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        }
      ]
    },
    "locale": {
      "description": "The language of the values; the main one by default.",
      "type": "string"
    },
    "publish": {
      "description": "Put it online right away (needs content.publish).",
      "type": "boolean"
    },
    "externalId": {
      "description": "The key of the item in your system, unique per collection.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "values"
  ]
}

Answer (201)

{
  "type": "object",
  "properties": {
    "item": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "key": {
          "type": "string",
          "description": "collection/slug"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published",
            "bin"
          ]
        },
        "changed": {
          "type": "boolean",
          "description": "The draft differs from what is online."
        },
        "externalId": {
          "type": [
            "string",
            "null"
          ]
        },
        "slug": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        },
        "values": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {},
          "description": "By field name, in the language asked."
        },
        "online": {
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "version": {
          "type": "number"
        },
        "updatedAt": {
          "type": "string"
        },
        "publishedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "key",
        "status",
        "changed",
        "externalId",
        "slug",
        "values",
        "version",
        "updatedAt",
        "publishedAt"
      ],
      "additionalProperties": false
    },
    "published": {
      "type": "boolean"
    },
    "repeated": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "message"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "item",
    "published",
    "warnings"
  ],
  "additionalProperties": false
}

GET/sites/{site}/collections/{collection}/items/{item}

One item: its draft, and what is online when that differs

Needs the right `site.read`.

Parameters
NameWhereRequired
sitepathYes
collectionpathYes
itempathYes
localequeryNo

Answer (200)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "key": {
      "type": "string",
      "description": "collection/slug"
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "bin"
      ]
    },
    "changed": {
      "type": "boolean",
      "description": "The draft differs from what is online."
    },
    "externalId": {
      "type": [
        "string",
        "null"
      ]
    },
    "slug": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "values": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {},
      "description": "By field name, in the language asked."
    },
    "online": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "version": {
      "type": "number"
    },
    "updatedAt": {
      "type": "string"
    },
    "publishedAt": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "id",
    "key",
    "status",
    "changed",
    "externalId",
    "slug",
    "values",
    "version",
    "updatedAt",
    "publishedAt"
  ],
  "additionalProperties": false
}

PATCH/sites/{site}/collections/{collection}/items/{item}

Changes an item, as a draft or online at once

Needs the right `content.edit`.

Parameters
NameWhereRequired
sitepathYes
collectionpathYes
itempathYes
idempotency-keyheaderNo

Body of the request

{
  "type": "object",
  "properties": {
    "values": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {},
      "description": "By field name. Rich text as { \"markdown\": \"…\" }; an image { \"asset\": \"<id>\" } or { \"url\": \"https://…\" }; a reference collection/slug; a link \"/contact\" or \"https://…\"."
    },
    "slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        }
      ]
    },
    "locale": {
      "description": "The language of the values; the main one by default.",
      "type": "string"
    },
    "publish": {
      "description": "Put it online right away (needs content.publish).",
      "type": "boolean"
    }
  }
}

Answer (200)

{
  "type": "object",
  "properties": {
    "item": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "key": {
          "type": "string",
          "description": "collection/slug"
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "published",
            "bin"
          ]
        },
        "changed": {
          "type": "boolean",
          "description": "The draft differs from what is online."
        },
        "externalId": {
          "type": [
            "string",
            "null"
          ]
        },
        "slug": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        },
        "values": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {},
          "description": "By field name, in the language asked."
        },
        "online": {
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "version": {
          "type": "number"
        },
        "updatedAt": {
          "type": "string"
        },
        "publishedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id",
        "key",
        "status",
        "changed",
        "externalId",
        "slug",
        "values",
        "version",
        "updatedAt",
        "publishedAt"
      ],
      "additionalProperties": false
    },
    "published": {
      "type": "boolean"
    },
    "repeated": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "message"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "item",
    "published",
    "warnings"
  ],
  "additionalProperties": false
}

DELETE/sites/{site}/collections/{collection}/items/{item}

Moves an item to the bin, and with publish=true off the site at once

Needs the right `content.edit`.

Parameters
NameWhereRequired
sitepathYes
collectionpathYes
itempathYes
publishqueryNo
idempotency-keyheaderNo

POST/sites/{site}/collections/{collection}/items/upsert

Adds or changes up to 100 items by their externalId, all or nothing

An item with an externalId that exists in the collection is changed, the others are added. In one transaction; with `publish: true` they go online in one publication. Send the same Idempotency-Key again after a timeout. Needs the right `content.edit`.

Parameters
NameWhereRequired
sitepathYes
collectionpathYes
idempotency-keyheaderNo

Body of the request

{
  "type": "object",
  "properties": {
    "items": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "values": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {},
            "description": "By field name. Rich text as { \"markdown\": \"…\" }; an image { \"asset\": \"<id>\" } or { \"url\": \"https://…\" }; a reference collection/slug; a link \"/contact\" or \"https://…\"."
          },
          "slug": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              }
            ]
          }
        },
        "required": [
          "externalId",
          "values"
        ]
      }
    },
    "locale": {
      "type": "string"
    },
    "publish": {
      "type": "boolean"
    }
  },
  "required": [
    "items"
  ]
}

Answer (201)

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "key": {
            "type": "string",
            "description": "collection/slug"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published",
              "bin"
            ]
          },
          "changed": {
            "type": "boolean",
            "description": "The draft differs from what is online."
          },
          "externalId": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "values": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {},
            "description": "By field name, in the language asked."
          },
          "online": {
            "anyOf": [
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "type": "number"
          },
          "updatedAt": {
            "type": "string"
          },
          "publishedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "created": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "key",
          "status",
          "changed",
          "externalId",
          "slug",
          "values",
          "version",
          "updatedAt",
          "publishedAt",
          "created"
        ],
        "additionalProperties": false
      }
    },
    "published": {
      "type": "boolean"
    },
    "repeated": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "message"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "items",
    "published",
    "warnings"
  ],
  "additionalProperties": false
}

POST/sites/{site}/publish

Puts the drafts online: everything the key may publish, one item, or one item offline

Without item: every draft the key may publish; design work in progress stays back, with the reason. Checked like in the editor: a link to what does not go along stops the publication. Needs the right `content.publish`.

Parameters
NameWhereRequired
sitepathYes
idempotency-keyheaderNo

Body of the request

{
  "type": "object",
  "properties": {
    "item": {
      "description": "Only this item.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "unpublish": {
      "description": "Takes this item offline.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  }
}

Answer (201)

{
  "type": "object",
  "properties": {
    "release": {
      "type": [
        "number",
        "null"
      ]
    },
    "online": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "staysBack": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "message"
        ],
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "message"
        ],
        "additionalProperties": false
      }
    },
    "repeated": {
      "type": "boolean"
    }
  },
  "required": [
    "release",
    "online",
    "staysBack",
    "warnings"
  ],
  "additionalProperties": false
}

POST/sites/{site}/assets

Stores an image or a file, from an address or in base64

Either `url` (https, fetched by Kintsu), or `data` in base64 with `filename` and `contentType`, at most 25 MB. The same file twice is one asset. Use its id in an image value: `{ "asset": "<id>" }`. Needs the right `content.edit`.

Parameters
NameWhereRequired
sitepathYes

Body of the request

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri"
    },
    "data": {
      "type": "string"
    },
    "filename": {
      "type": "string",
      "maxLength": 200
    },
    "contentType": {
      "type": "string",
      "maxLength": 100
    },
    "alt": {
      "description": "Per language.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 300
      }
    },
    "folder": {
      "type": "string",
      "maxLength": 100
    }
  }
}

Answer (201)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "kind": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "width": {
      "type": [
        "number",
        "null"
      ]
    },
    "height": {
      "type": [
        "number",
        "null"
      ]
    },
    "existing": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "kind",
    "name",
    "width",
    "height"
  ],
  "additionalProperties": false
}

GET/sites/{site}/submissions

What visitors sent with the forms of a site, oldest first

Per form with `form`, from a moment with `since`, a page at a time with `next`. Such as to put them in a CRM. Needs the right `submission.read`.

Parameters
NameWhereRequired
sitepathYes
formqueryNo
sincequeryNo
limitqueryNo
cursorqueryNo

Answer (200)

{
  "type": "object",
  "properties": {
    "submissions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "form": {
            "type": "string"
          },
          "page": {
            "type": [
              "string",
              "null"
            ]
          },
          "locale": {
            "type": [
              "string",
              "null"
            ]
          },
          "data": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "status": {
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "form",
          "page",
          "locale",
          "data",
          "status",
          "createdAt"
        ],
        "additionalProperties": false
      }
    },
    "next": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "submissions",
    "next"
  ],
  "additionalProperties": false
}