Feathery
MARKETING · MARKETING
Forms, their full schema, and submissions in the account they connected.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
feathery_delete_api_document_envelope_by_envelope_idWRITEDelete a document envelope via DELETE /api/document/envelope/{envelope_id}/. Permanently delete one document envelope, named entirely by its id in the path. Feathery documents no recycle bin and no restore endpoint for envelopes, so treat this as irreversible.
feathery_delete_api_field_hidden_deleteWRITEDelete hidden fields via DELETE /api/field/hidden/delete/. Permanently delete hidden fields named by a `field_ids` array in the request body, and return the ids that were deleted. Deleting a hidden field discards the values users have submitted into it; Feathery documents no restore endpoint, so treat this as irreversible.
feathery_delete_api_form_by_form_idWRITEDelete a form via DELETE /api/form/{form_id}/. Permanently delete one form, named by id in the path. The body must carry `confirm_delete: true` -- Feathery requires the confirmation and refuses without it. Deleting a form takes its submissions' context with it and Feathery documents no restore endpoint, so treat this as irreversible.
feathery_delete_api_form_link_by_link_idWRITERevoke a form access link via DELETE /api/form/link/{link_id}/. Revoke one access link, named by id in the path. It stops opening its form immediately, and the response returns the link in its final state rather than an empty body. Revoking an already-revoked link changes nothing. Revoking does NOT reopen the submission through its plain ?_id= URL -- a submission that has been given an access link stays closed until a new link is created for it.
feathery_delete_api_user_by_idWRITEDelete an end user via DELETE /api/user/{id}/. Permanently delete one Feathery end user, named by id in the path. A user IS their submissions across every form, so this discards all of that person's submitted data. Feathery documents no restore endpoint; treat this as irreversible.
feathery_delete_api_workspace_by_workspace_idWRITEDelete a workspace via DELETE /api/workspace/{workspace_id}/. Permanently delete one Feathery workspace connected to this main account, named by id in the path. This takes the workspace's forms and submissions with it and Feathery documents no restore endpoint; treat this as irreversible. White-label only.
feathery_get_api_accountREADRetrieve account information via GET /api/account/. Retrieve this Feathery team's account information: the team name and the list of accounts that belong to it. Changes nothing in the workspace.
feathery_get_api_ai_extractionREADList AI document extractions via GET /api/ai/extraction/. List this organization's AI document extractions, each with its id, name, `file_type` (image, csv, meeting or ai_query) and `extraction_type`. The response is paginated. Requires the Document Intelligence feature to be enabled on the account; without it this answers an error rather than an empty list, which is a plan state and not a bad key. Changes nothing in the workspace.
feathery_get_api_ai_extraction_by_extraction_idREADRetrieve an AI extraction via GET /api/ai/extraction/{extraction_id}/. Retrieve the full configuration of one AI document extraction: its queries (each with `question_type`, entities, criteria, validation rules and the fields extracted values are saved to), its variants, its post-extraction logic rules, its file sources and its active integrations. Requires the Document Intelligence feature. Changes nothing in the workspace.
feathery_get_api_ai_run_batch_by_extraction_idREADList AI extraction runs via GET /api/ai/run/batch/{extraction_id}/. List the runs of one AI document extraction, optionally narrowed by `start_time`, `end_time` or `user_id`. Each run reports the document processed, whether it succeeded, the datapoints extracted, the approval state and approver, and the inbound email or audio that triggered it. Changes nothing in the workspace.
feathery_get_api_computer_agent_by_agent_id_runREADList computer agent runs via GET /api/computer-agent/{agent_id}/run/. List one computer agent's runs, newest first. The response is paginated (`count`, `next`, `previous`, `total_pages`, `current_page`, `results`) and each entry carries the same fields as a single run retrieval. Changes nothing in the workspace.
feathery_get_api_computer_agent_by_agent_id_run_by_run_idREADRetrieve a computer agent run via GET /api/computer-agent/{agent_id}/run/{run_id}/. Retrieve one computer agent run's status and result, plus the data stored on its submission. `status` is one of pending, running, awaiting_approval, succeeded, failed or cancelled -- awaiting_approval means the run is paused for a human reviewer inside Feathery, so it is not a failure. Poll this until the status is terminal. Changes nothing in the workspace.
feathery_get_api_document_envelopeREADList document envelopes via GET /api/document/envelope/. List document envelopes -- the filled-out documents this account's users have produced -- looked up either by document template or by submission: `type` is 'document' or 'user' and `id` is the corresponding id. Each envelope reports its file URL, its signer and sender, and whether the signer has viewed and signed it. Changes nothing in the workspace.
feathery_get_api_document_templateREADList document templates via GET /api/document/template/. List the document templates this team has uploaded, optionally narrowed by `name` (substring match) or `tags`. The tag filter has its own grammar: `;;` matches any tag in a set (OR) and repeating the parameter requires several sets (AND). Uploading a template is not available through this integration -- it is a multipart file upload. Changes nothing in the workspace.
feathery_get_api_fieldREADList all data for a user via GET /api/field/. For one user (`id`, their Feathery user id), list every field they have submitted data for -- form fields and hidden fields alike -- with the value, the display text, and when the value was first submitted and last updated. For repeated and file fields the two timestamps are arrays aligned with the value array. Called without `id` it lists the account's fields with no user values attached. Changes nothing in the workspace.
feathery_get_api_field_hiddenREADList hidden fields via GET /api/field/hidden/. List every hidden field in this Feathery account, each with its id, internal id, type, server-side flag, tags and timestamps. Changes nothing in the workspace.
feathery_get_api_formREADList forms via GET /api/form/. List this account's Feathery forms, optionally narrowed by `tags` (a comma-separated list, all of which must be present) or by `active`. Each form reports its id, name, active flag and tags. `internal_id` is returned only for white-label workspaces. Changes nothing in the workspace.
feathery_get_api_form_by_form_idREADRetrieve a form schema via GET /api/form/{form_id}/. Retrieve the full schema of one form: its steps and every element on them (images, videos, progress bars, texts, buttons and fields, each with its hide rules), its navigation conditions, its logic rules, its shared code snippets, its active integrations and its translation map. This is the read that tells an agent which field ids a submission may set. Changes nothing in the workspace.
feathery_get_api_form_defaultREADRetrieve form defaults via GET /api/form/default/. Fetch the form settings this team applies to newly created forms -- the workspace's own defaults merged over anything inherited from a parent workspace. Changes nothing in the workspace.
feathery_get_api_form_linkREADList form access links via GET /api/form/link/. List this environment's access links, newest first, optionally narrowed to one form or one submission -- the read that says whether a link you sent has been opened, has expired or has been revoked (`status` is active, redeemed, expired or revoked). Listed links never include `token` or `url`: only the response that created a link hands out its credential. Paginated. Changes nothing in the workspace.
feathery_get_api_form_submissionREADList form submissions via GET /api/form/submission/. List submission data for one form (`form_id` is required), with filters for user, update-time and creation-time windows, completion state, a `field_search` array of field id / value pairs, a `fuzzy_search` trigram search with per-parameter weights summing to 1, a `fields` allowlist and `no_field_values` for a faster metadata-only read. The response is paginated at 500 rows, raised with `page_size` up to 1000. `use_cache` trades freshness for latency and omits `value_created_at`/`value_updated_at`. `field_search` and `fuzzy_search` are STRINGIFIED JSON, not objects. Changes nothing in the workspace.
feathery_get_api_logs_api_connector_by_form_idREADList API connector errors via GET /api/logs/api-connector/{form_id}/. List recent error responses from API connector requests triggered by one form, each with the endpoint URL, the status code, and the request and response bodies (truncated at 400 characters). Feathery keeps AT MOST THE LAST WEEK of this data, so an empty result for an older window is a retention fact and not a failure. Changes nothing in the workspace.
feathery_get_api_logs_email_extraction_by_extraction_idREADList forwarded AI extraction emails via GET /api/logs/email/extraction/{extraction_id}/. List emails that triggered one AI extraction and were then forwarded, each with the original sender, the forward recipients and the email group they are defined under, the subject prefix, and the user the extraction was attributed to. Optionally narrowed by time window or `user_id`. Changes nothing in the workspace.
feathery_get_api_logs_email_form_by_form_idREADList emails sent from a form via GET /api/logs/email/form/{form_id}/. List recent emails sent by Feathery's email integration on one form, each with the template it was based on, its recipients, its subject and when it was sent. At most the last week of data. Changes nothing in the workspace.
feathery_get_api_logs_email_issuesREADList email bounces and complaints via GET /api/logs/email/issues/. List the Bounce and Complaint events raised while sending email through Feathery, optionally narrowed to one `event_type` or a time window. Each entry names the recipients the message went to and the ones that were rejected. Changes nothing in the workspace.
feathery_get_api_logs_quik_by_form_idREADList Quik integration requests via GET /api/logs/quik/{form_id}/. List recent Quik integration requests and responses triggered by one form, each with the Quik URL, the status code, and the request and response bodies. At most the last week of data. Changes nothing in the workspace.
feathery_get_api_logs_webhook_by_form_idREADList webhook errors via GET /api/logs/webhook/{form_id}/. List recent webhook delivery failures for one form, including HTTP 4xx/5xx responses and connection or timeout failures -- a `status_code` of 0 means no HTTP response was received at all. Request and response bodies are truncated at 1200 characters. At most the last week of data. Changes nothing in the workspace.
feathery_get_api_userREADList end users via GET /api/user/. List this account's Feathery end users -- a user IS their submissions across every form -- optionally narrowed by creation-time window or by a single field value (`filter_field_id` paired with `filter_field_value`). Each user reports its id, timestamps and collaborator activity. Changes nothing in the workspace.
feathery_get_api_user_by_user_id_eventREADGet a user's form events via GET /api/user/{user_id}/event/. Get one user's form events, grouped by form and ordered oldest to newest: load, complete and skip events with the step they occurred on and the step navigated to. Feathery OVERWRITES an event of the same type on the same step rather than appending, so this is a current-state read rather than a full history. Changes nothing in the workspace.
feathery_get_api_user_by_user_id_sessionREADGet a user's form session via GET /api/user/{user_id}/session/. Get one user's form session data: every form they are working on, the step each was last on, whether and when it was completed, and whether the form remembers their location. Changes nothing in the workspace.
feathery_get_api_workspaceREADList workspaces via GET /api/workspace/. List the Feathery workspaces connected to this main account, each with its branding, feature limits, disabled tabs and member accounts; set `submission_data` to also return each workspace's submission usage for the current billing cycle. WHITE LABEL ONLY: this is available only on Feathery's white-label product, so an account without it gets an error rather than an empty list -- a plan state, not a bad key. A test API key returns only test workspaces. Changes nothing in the workspace.
feathery_get_api_workspace_by_workspace_idREADRetrieve a workspace via GET /api/workspace/{workspace_id}/. Retrieve one Feathery workspace by id, with its branding, feature limits, member accounts and -- with `submission_data` -- its submission usage for the current billing cycle. Feathery ALSO returns this workspace's live and test API keys and live and test SDK keys; Agentic Fabriq REDACTS all four, because each is a working credential for that workspace and a tool result reaches the model's context and the audit pipeline. Read them from the Feathery dashboard instead. White-label only. Changes nothing in the workspace.
feathery_get_api_workspace_report_formREADWorkspace form report via GET /api/workspace/report/form/. A paginated report of every child workspace with its forms (id, name, active flag and step count) and per-field-type usage statistics, plus `field_types`, the full list of standard field type values. `page_size` defaults to 50 and caps at 100. White-label only; a test API key returns only test workspaces. Changes nothing in the workspace.
feathery_get_api_workspace_report_submissionsREADWorkspace submission report via GET /api/workspace/report/submissions/. A paginated report of each workspace's completed submissions within a billing cycle, with `cycle_start` and `cycle_end`, counting live submissions only. `billing_cycle_offset` walks back through earlier cycles (at most 11 for monthly billing, 1 for yearly). `hidden_field_id` may be repeated to break the counts down by hidden field, up to 10 distinct values. `page_size` defaults to 50 and caps at 100. White-label only. Changes nothing in the workspace.
feathery_patch_api_accountWRITEEdit a team account via PATCH /api/account/. Edit one existing member of this Feathery team: their role ('admin', 'editor' or 'viewer') and the five per-account permission flags (edit form results, invite collaborators, edit collaborator settings, edit logic rules, edit themes). Names the member by `email` or by `account_id`; one of the two must be given. Feathery roles govern what a teammate can do in the Feathery dashboard, not what an API key can reach -- every key sees the same fields and forms. Sends no mail.
feathery_patch_api_account_uninviteWRITERemove a team account via PATCH /api/account/uninvite/. Remove a user from this Feathery team, named by `email` or `account_id`; one of the two must be given. Returns the team's remaining accounts. Irreversible from here -- re-adding the person needs an invitation, which this integration does not offer. Sends no mail.
feathery_patch_api_field_hidden_detailWRITEEdit hidden fields via PATCH /api/field/hidden/detail/. Edit one or more hidden fields, as a JSON ARRAY of objects each naming the field's `id` and the properties to change (`type`, `server_side`, `tags`). At most 100 fields per request. Setting `tags` REPLACES the field's existing tags rather than merging into them.
feathery_patch_api_form_by_form_idWRITEUpdate a form via PATCH /api/form/{form_id}/. Update one form's properties: `enabled` (its live status), `form_name`, `translations` (a map of default text to translations -- setting it REPLACES any existing translations) and `fields`, which sets per-field tags on the named form fields only. Three of Feathery's parameters are NOT offered here: `integrations` would register a caller-chosen webhook URL and headers that receive submission data on every future submission, and `logic_rules` and `shared_codes` carry caller-supplied `code` objects Feathery executes -- each also with replace-all semantics that silently delete anything not resent.
feathery_patch_api_form_defaultWRITESet form defaults via PATCH /api/form/default/. Set the form settings this team applies to NEWLY created forms: redirect URL, error display, autocomplete, autofocus, Enter-to-submit, scroll behaviour, branding position, completion behaviour, user and location tracking, data saving, authentication mode, edit-after-completion, hidden-field handling, URL-parameter saving and hash tracking. Every parameter is optional and only what is sent is changed. THESE APPLY ONLY GOING FORWARD: existing forms are never modified and a form's settings are never re-synced, and a straight duplicate of an existing form keeps its source's settings rather than taking these.
feathery_patch_api_workspace_by_workspace_idWRITEUpdate a workspace via PATCH /api/workspace/{workspace_id}/. Update one Feathery workspace's name, branding, feature limits, hidden tabs and settings, enabled integrations and metadata. White-label only. Sending a list-valued field replaces that list rather than adding to it.
feathery_post_api_computer_agent_by_agent_id_runWRITETrigger a computer agent run via POST /api/computer-agent/{agent_id}/run/. Start a run of a Feathery computer agent, which drives a real browser session to carry out the task configured on that agent in the Feathery dashboard. The `fields` mapping is stored on a Feathery submission and substituted into the agent's task wherever it uses {{field_id}} placeholders; `user_id` names the submission to store them on and creates it if it does not exist. The task itself is account-configured and is not a parameter of this call. The run starts ASYNCHRONOUSLY: this returns `run_id`, `run_url` and `user_id`, and the run's outcome is read back with the retrieve tool.
feathery_post_api_data_hub_by_hub_id_actionWRITEPerform a data hub entry action via POST /api/data-hub/{hub_id}/action/. Create, retrieve, update or DELETE entries in one Feathery data hub. The `operation` field selects which -- 'create', 'get', 'update' or 'delete' -- so ONE tool carries all four effects and the argument decides: 'delete' permanently removes the entry named by `entry_id` and answers 204. `data` is the entry's field mapping for create and update and the filter criteria for get; `entry_id` is required for update and delete; `fields` narrows which field keys a get returns. Classified destructive because one of its four operations is.
feathery_post_api_document_fillWRITEFill a document template via POST /api/document/fill/. Fill out a document template that has already been uploaded and mapped in this Feathery account, from a `field_values` mapping of field id to value, optionally associating the result with an existing Feathery user. Returns `file_url`, the URL of the filled document. Feathery's `signer_email` parameter is NOT offered here: it routes the document to an address for signature, and an agent-chosen recipient receives mail that cannot be unsent, so this tool fills the document and hands back the URL for the customer to route themselves.
feathery_post_api_field_hiddenWRITECreate hidden fields via POST /api/field/hidden/. Create a hidden field in this Feathery account: a new unique `id`, a `type` of json_value, number_value or text_value, `server_side` for a field the browser never sees, and optional `tags` (at most 10KB). THE REFERENCE CONTRADICTS ITSELF ABOUT THE BODY SHAPE: its prose says "by passing an array of field objects. Bulk creation is limited to 100 fields per request", while every one of its three code samples and its example response send and return a SINGLE object. This tool ships the object shape its examples show; the array form could not be discriminated without a real key, because Feathery authenticates before it validates a body. If this answers 400 on a well-formed object, the array form is the one to try.
feathery_post_api_formWRITECreate a form from a template via POST /api/form/. Create a new form by copying an existing template form, naming the new form (`form_name`, which must be unique), the `template_form_id` to copy, the `steps` to create and the `navigation_rules` connecting them. Integrations on the template are copied over as well. Element arrays inside each step edit the copied elements; anything not named is copied as-is. Feathery's `logic_rules` parameter is NOT offered here: a logic rule carries a `code` object Feathery executes for every future end user, and this integration does not accept caller-supplied code.
feathery_post_api_form_copyWRITECopy a form via POST /api/form/copy/. Duplicate an existing form in this account under a new name, from `copy_form_id` and `form_name`. Returns the new form's id, name, active flag and tags. A straight duplicate keeps its source form's settings; it does not pick up the team's form defaults.
feathery_post_api_form_hidden_fieldWRITECreate hidden fields (deprecated route) via POST /api/form/hidden_field/. Create hidden fields through Feathery's DEPRECATED /api/form/hidden_field/ route. The reference says plainly: "Use /api/field/hidden/ instead. This endpoint accepts and returns an array of objects and does not include internal_id, created_at, or updated_at in the response." Prefer the create hidden fields tool on /api/field/hidden/; this one exists so an existing integration that depends on the array shape is not silently dropped.
feathery_post_api_form_linkWRITECreate a form access link via POST /api/form/link/. Create an access link that opens ONE submission of ONE form, optionally expiring (`expires_in` seconds or an `expires_at` timestamp, at most ten years, and not both), optionally single-use (bound to the first device that opens it), and optionally prefilled from a `fields` mapping. `form` takes the form's id, slug or name. Creating a link also creates the submission it opens, and from then on that submission can ONLY be opened through an access link -- not through its plain ?_id= URL. THE RESPONSE CARRIES A CREDENTIAL: `token`, and the `url` that contains it, are returned only here and never again by listing or revoking, so they reach this caller's context and the audit log. They are deliberately not redacted, because the link is the whole point of the call; treat the result as a secret, and revoke the link if it goes somewhere it should not.
feathery_post_api_form_submissionWRITECreate or update form submissions via POST /api/form/submission/. Set field values for a user and initialise their submissions. `fields` maps field identifier (id or internal id) to value -- a signature field takes {"file": <base64>, "name": <filename>}. `user_id` names a new or existing user and is generated and returned when omitted; `forms` lists form ids to initialise submissions for; `complete` sets the completion state, and omitting it on an existing submission leaves that state unchanged. `documents` generates the named documents and returns values read back from the `output_location` cells of spreadsheet documents. This WRITES a user's submitted data.
feathery_post_api_form_submission_pdfWRITEExport form submission PDFs via POST /api/form/submission/pdf/. Create a PDF export of one submission (`user_id`) or of many at once (a `start_time`/`end_time` or `created_after`/`created_before` window, optionally narrowed by `completed`); `form_id` is required and the two modes are mutually exclusive. Returns `pdf_url`, or `results` plus `submission_count` for a bulk export. THE FILE IS NOT IMMEDIATELY AVAILABLE: poll the URL, which the reference suggests doing up to five times, once per second. A `pdf_url` of null means the submission has no data to render. Once a submission is complete its PDF is frozen and re-requesting does not update it. Feathery's `webhook` parameter -- a caller-chosen callback URL -- is NOT offered here; polling is the documented alternative.
feathery_post_api_userWRITECreate or fetch an end user via POST /api/user/. Create, update or retrieve one Feathery end user by `id`: if no user with that id exists it is created, otherwise the existing one is returned. Feathery also returns that user's `sdk_key`, which authenticates the React library for displaying forms as this user -- Agentic Fabriq REDACTS it, because a bearer credential in a tool result reaches the model's context and the audit pipeline. The user's id and timestamps are returned as normal.
feathery_post_api_workspaceWRITECreate a workspace via POST /api/workspace/. Create a new Feathery workspace under this main account, with its name, branding (logo, brand URL, favicon, name, primary and secondary colours), `features` limits, the dashboard and form-editor tabs to hide, the form settings to hide, the form elements to hide, the integrations to enable and arbitrary `metadata`. White-label only. A test API key creates a TEST workspace rather than a live one.
feathery_post_api_workspace_by_workspace_id_create_template_formWRITEPopulate a workspace from a template via POST /api/workspace/{workspace_id}/create-template-form/. Create a form inside one workspace from one of the main account's forms or custom templates, naming the new form (`form_name`) and the `template_id` to populate from. Returns the new form's id, name and internal id. White-label only.
Often connected alongside
Put Feathery behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.