Skip to content

Public API and API keys

The public API lets your own code, Zapier and Make read forms and responses. It’s available on Pro and above.

  1. Go to Organization in the sidebar (owners and admins) and find API keys.

  2. Select New API key, give it a Name (such as Zapier), and choose what it’s Allowed to do:

    PermissionAllows
    forms:readListing forms and their questions
    responses:readReading responses, only on forms whose privacy allows export
    webhooks:writeSubscribing to new responses
  3. “Copy this key now — it won’t be shown again.” KyraForm keeps only a hash. Select I’ve saved it.

Revoke a key to stop it working immediately.

The API’s base address is shown on the API keys card. Send the key with every request:

Authorization: Bearer efk_…

Requests are limited to 120 a minute per key.

Method and pathPermissionReturns
GET /meany{ organization: { id, name, slug }, scopes }. Use it to test a key.
GET /formsforms:read{ forms: [{ id, name, slug, published, responses_available, created_at, updated_at }] }
GET /forms/:id/fieldsforms:read{ fields: [{ key, field_id, label, type }] }
GET /forms/:id/responses?limit=25&before=<ISO time>responses:read{ responses: [...], next_before }, newest first
POST /hookswebhooks:writeSubscribe: { form_id, target_url, event?, source? } → { id, … }
DELETE /hooks/:idwebhooks:writeUnsubscribe → 204
  • Each response has the same shape as submission in a webhook body.
  • To page through responses, pass the next_before value as before on the next request.
  • responses_available is false for forms whose privacy (Anonymous or Blind review) keeps responses inside KyraForm. Reading or subscribing is refused for those forms.
  • A subscription made with POST /hooks is an ordinary webhook. It’s signed, retried and listed in the form’s delivery log.

Errors look like { "error": "…" } with one of these statuses:

StatusMeaning
400The request is malformed
401Missing or revoked key
403The key lacks the permission, or the form’s privacy forbids it
404No such form or hook
429Over 120 requests a minute. Wait and retry.
Terminal window
curl -H "Authorization: Bearer $KYRA_KEY" "$KYRA_API/forms"