Webhook API
The webhook API lets you add things to your wishlist programmatically — from a shortcut on your phone, a browser bookmarklet, an automation service, or your own scripts.
Get an API key
- Open Settings in the app.
- In the API keys section, create a new key and give it a name (for example, "iOS Shortcut").
- Copy the key right away — it is shown only once. Only a hash of it is stored, so it cannot be recovered later.
You can have up to 10 keys and delete any of them at any time. Deleting a key immediately stops it from working, and things created with it stay in your wishlist.
Add a thing
Send a POST request with a JSON body to https://thingstohave.app/webhook. The API key goes in the body as the key field — there is no authorization header.
curl -X POST https://thingstohave.app/webhook \
-H "Content-Type: application/json" \
-d '{
"key": "your-api-key",
"name": "Fujifilm X100VI",
"url": "https://example.com/product/x100vi"
}'
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
key | string | yes | Your API key |
name | string | yes | Name of the thing, 1–500 characters |
url | string | no | Product link, must be a valid http(s) URL |
isOwned | boolean | no | Mark the thing as already owned |
listId | number | no | Attach the new thing to this list (must be your list) |
Responses
Success returns 200 with the created thing:
{ "success": true, "data": { "id": 123, "name": "Fujifilm X100VI" } }
If listId was provided but the thing could not be attached to that list, the thing is still created and the response includes a warning (it is not rolled back, so retrying will not create duplicates):
{
"success": true,
"data": { "id": 123, "name": "Fujifilm X100VI" },
"warnings": ["Thing created but not attached to list: not found"]
}
Errors return { "success": false, "error": "..." } with the matching status code:
| Status | Meaning |
|---|---|
400 | Invalid JSON or a failed field validation |
401 | Unknown or deleted API key |
429 | Rate limit exceeded |
500 | Unexpected server error |
Rate limit
Up to 60 requests per minute per IP address. If you hit the limit, wait and retry — a 429 response means the request was not processed.
Need more?
The webhook currently supports one action: creating a thing. If you need something else — reading lists, updating things — tell us at support@thingstohave.app.