Changes to the FormSmarts API & Webhook Client for Python, newest first.

Install or upgrade with pip install --upgrade formsmarts

2.1.6 2026-10-24

Fixed

  • Checkbox values were only treated as checked when written in lowercase: Yes or TRUE gave False. Values are now compared ignoring case and surrounding whitespace.

2.1.5 2026-10-20

Added

  • FormEntry.reply() and FormEntry.reply_all() send a note to the email address(es) entered on the form.
  • Field.revisions() returns the revision history of a field, as Revision objects. Revisions made with the API have API as the author.
  • FormEntry.edited_fields and Field.is_edited tell which fields were edited after the form was submitted. The return_edited_status argument of fetch(), fetch_batch(), search() and search_by_dates() returns the edited status with the entries.
  • Upload.read() downloads an attachment and returns its content.
  • FormEntry.submit() accepts an Upload object as the value of an upload field.

Changed

  • Breaking: Upload.value returns the Upload object itself, or None if the field is empty. It previously returned a value that depended on where the object came from. Reading it doesn't download the file: call read() or download(). Use Upload.upload_id for the Upload ID.
  • Assigning to the value of an Upload or Signature raises NotImplementedError instead of being ignored. Use Upload.replace() to replace an attachment.

Fixed

  • Submitting a list of Field objects that includes an Upload sent None instead of the Upload ID.

2.1.4 2026-09-29

Added

  • Notes: FormEntry.notes, FormEntry.add_note(), Note.fetch(), Note.update() and Note.delete(). Notes added with the API have API as the author, and only those can be edited or deleted with the API.
  • APIAuthenticator.account_id.

Fixed

  • Webhook entries couldn't be created on Python 3.8 to 3.10 (date parsing error). Dates returned by the API and webhooks are now parsed the same way, and FormEntry.submitted_at is always timezone-aware.

2.1.3 2026-09-24

Added

  • Network errors are raised as APIConnectionError, and timeouts as its subclass APITimeoutError (see Error Handling).
  • Requests time out by default after 10 seconds when connecting and 60 seconds when reading a response.

Changed

  • FormEntry.add_tags() adds up to 10 tags per request. add_tag() and add_tags() raise ValueError if a tag contains a comma.

Fixed

  • add_tag() could skip a tag with the same name as one of the entry's system tags.

2.1.2 2026-07-10

Added

  • The return_tags argument of FormEntry.fetch(), fetch_batch() and search_by_dates() returns the tags and system tags with the entries, saving a request per entry when reading FormEntry.tags.
  • formsmarts.__version__.

2.1.1 2026-05-11

Changed

  • Supports the ISO 8601 timestamps now returned by the Search API.

2.1.0 2026-04-13

First release on PyPI: pip install formsmarts.

Changed

  • Breaking: FormEntry.date_submitted was renamed FormEntry.submitted_at.