Everything an external developer needs to connect a website to Tweeble: what each API does, every input and output field with its data type and constraints, the request method, status codes, and copy-paste examples. Search, filter and sort below.
Every endpoint lives under your site's origin at /api/public/{accountId}/… — replace {accountId} with your account id (shown in every URL on your Profile's API URL list).
None. There are no API keys or tokens. Your account id in the URL only ever unlocks content you have already made public, and the write endpoints (contact forms, donations, volunteers) accept anonymous submissions by design.
Responses are JSON (UTF-8) unless noted. Requests may be JSON (Content-Type: application/json) or standard form data. Money is always an integer in US cents. Timestamps are ISO 8601 in UTC unless noted. Field names are camelCase.
Every endpoint allows requests from any origin (Access-Control-Allow-Origin: *) and answers preflight OPTIONS requests, so you can call them straight from browser JavaScript.
GET feeds are cached for 60 seconds. Image links inside responses are signed and expire after about an hour — never store them.
Write endpoints are limited per visitor IP address: contact form submissions 8 per 15 minutes per form, volunteer sign-ups 10 per 15 minutes, donation checkouts 20 per 15 minutes. Exceeding a limit returns HTTP 429.
Failures return a non-2xx status and a JSON body { "error": "plain-English reason" }. Feed (GET) endpoints never error for a missing feature — they return an empty array.
Each endpoint lists exactly when it returns data. Feeds follow what is already public on your Tweeble pages: nothing appears on an external site that a guest couldn't already see on Tweeble.
Where an API both reads and writes, the GET and the POST share one URL. Use the GET to learn the inputs, then the POST to send them. (On the contact-form list URL, the POST also says which form it is for by including formId in the body.)
| GET (read the definition) | POST (send the data) | How they connect |
|---|---|---|
/api/public/{accountId}/contact-forms | /api/public/{accountId}/contact-forms | Same URL. GET lists every form; POST submits to the form named by formId in the body (use an id from the list). |
/api/public/{accountId}/contact-forms/{formId} | /api/public/{accountId}/contact-forms/{formId} | Same URL. GET returns the definition/schema; POST submits. |
/api/public/{accountId}/donate | /api/public/{accountId}/donate | Same URL. GET returns the definition/schema; POST submits. |
/api/public/{accountId}/volunteer | /api/public/{accountId}/volunteer | Same URL. GET returns the definition/schema; POST submits. |
/api/public/{accountId}/contact-forms/{formId} | /api/public/{accountId}/contact-forms/{formId}/submitAlias of the POST above — identical behavior (the embed script uses it). | Alias for the same form. |