Nurvequest

The API

A small REST API over HTTPS, for your own systems: list forms and their questions, and read, add, change and delete responses. Owners and admins make keys under Settings, API keys. A key belongs to the workspace and sees only its forms.

Send the key in a header with every request:

curl https://nurvequest.com/api/v1/forms.json -H "X-Nurvequest-Key: nq_…"

Answers are JSON. A missing or revoked key gets 401; a form or response that isn't the workspace's gets 404.

Forms

CallReturns
GET /api/v1/forms.json{ forms: [{ id, title, state, url, responses, created, updated }], next }
GET /api/v1/forms/FORM/form.jsonThe form as published: { id, title, state, url, sections, questions: [{ id, key, type, label, help, required, options, section }], endings, calcs }

Responses

CallDoes
GET /api/v1/forms/FORM/responses.jsonResponses, newest first: { responses, next }. Pass next back as after for the following page. Takes limit (up to 100, default 50), view (unread, starred, tests, unpaid, trash), q (search), from and to (days, YYYY-MM-DD), field and value (a question's id and answer), and tests=1.
POST /api/v1/forms/FORM/responses.jsonAdds a response, checked as if sent through the form: { "answers": { "email": "ada@example.com", "plan": "A team" }, "hidden": { "utm_source": "crm" }, "test": false }. Answers are named by field name or question id; choices by their wording. Answers 201 with the response, or 422 with errors by question id. It notifies members and fires response.created.
GET /api/v1/forms/FORM/responses/ID/response.jsonOne response.
POST /api/v1/forms/FORM/responses/ID/response.jsonChanges answers: { "answers": { "name": "Ada King" } }. The response notes the change by the key's name, and response.updated fires.
POST /api/v1/forms/FORM/responses/ID/delete.jsonDeletes it for good; response.deleted fires.
GET /api/v1/forms/FORM/responses/ID/file?key=…Redirects to a short-lived link to download one uploaded file. The response lists each file's own URL.

A response looks the same as in a webhook, with status, read, starred, trashed and its list of edits as well.

Limits

Up to 600 requests a minute for each address calling. Over that, 429 with Retry-After.