The Intake System is how you get information into Sylva from the tools you already use — whether that's a script hitting an API, an email you forward, a GitHub event, or a link you share from your phone.

API Keys
API keys let you authenticate external requests that send data into Sylva. Each key is tied to your account and tracks how many requests it has processed.
To create a key:
- Go to Settings > Integrations and find the Intake API Keys section
- Click Generate Key
- Give the key a descriptive name — something like "Zapier automation" or "Build server" — so you can identify it later
- Copy the key immediately. Sylva shows it only once

You can authenticate requests in two ways:
- Bearer token — Pass the key in the
Authorizationheader:Authorization: Bearer sk_your_key_here - Query parameter — Append
?key=sk_your_key_hereto the endpoint URL. Useful for tools that don't let you set custom headers
Each key displays a request count so you can monitor usage. To revoke a key, click the Revoke button next to it. Revocation is immediate — any in-flight requests using that key will fail.
REST Endpoint
Send data to Sylva by making a POST request to /api/intake. The endpoint accepts JSON and returns the status of each item you send.
Request body schema:
| Field | Type | Required | Description |
|---|---|---|---|
captures | array | Yes | One or more items to ingest |
captures[].content | string | Yes | The main text content |
captures[].source | string | No | Where this came from — e.g. "slack", "email", "manual" |
captures[].title | string | No | A short label for the item |
captures[].context | string | No | "work" or "personal". Defaults to "work" |
captures[].source_url | string | No | A URL associated with the content |
captures[].captured_at | string | No | ISO 8601 timestamp. Defaults to now |
cURL example:
bash
curl -X POST https://app.sylva.ai/api/intake
-H "Authorization: Bearer sk_your_key_here"
-H "Content-Type: application/json"
-d '{
"captures": [
{
"content": "Q3 revenue came in 12% above forecast",
"source": "slack",
"title": "Q3 Results Update",
"context": "work"
}
]
}'
Response format (200 OK):
{
"ingested": 1,
"duplicates": 0,
"errors": 0,
"items": [
{
"status": "ingested",
"title": "Q3 Results Update"
}
]
}
Each item in the items array has a status of ingested, duplicate, or error. If an item errors, it also includes a message field explaining why.
Email Intake
Email intake gives you a unique Sylva email address. Anything you forward (or send) to that address gets captured automatically.

To set it up:
- Go to Settings > Integrations and find the Email Intake section
- Toggle Enable Email Intake on
- Copy your unique intake address — it looks something like
intake-a1b2c3@sylva.ai - In your email client, set up a forwarding rule or save the address as a contact for quick forwarding
How deduplication works: Sylva hashes the subject line, sender, and body of each email. If you forward the same email twice, the second copy is flagged as a duplicate and skipped. This means you don't need to worry about forwarding rules that might accidentally send the same message more than once.
The email subject becomes the item's title, and the email body becomes the content. Attachments (images, PDFs, text files) are processed when supported.
GitHub Webhooks
Connect a GitHub repository to Sylva so that development activity flows into your knowledge base automatically.

To configure a webhook:
- In Settings > Integrations, find the GitHub Webhooks section
- Copy the Webhook URL shown there
- In your GitHub repository, go to Settings > Webhooks > Add webhook
- Paste the Sylva webhook URL into the Payload URL field
- Set Content type to
application/json - Enter the Webhook Secret shown in Sylva into the Secret field in GitHub. This secret verifies that payloads actually come from GitHub
- Under Which events would you like to trigger this webhook?, select Let me select individual events and check the ones you want
Supported event types:
- Pull requests — opened, closed, merged, review requested
- Issues — opened, closed, labeled, assigned
- Push — commits pushed to any branch
- Releases — published, drafted, pre-released
- Comments — issue comments, pull request review comments
Each event is captured with the event type as the source, the repository and event title as the title, and the relevant details (commit messages, PR description, issue body) as the content.
PWA Share Target
If you install Sylva as a Progressive Web App on your phone or tablet, you can share content directly into Sylva from any app — a browser, note-taking app, read-later service, or anything else that supports the system share sheet.
When you share to Sylva, the Quick Capture page opens pre-filled with the shared title, text, and URL. You can edit any field, choose a context (Work or Personal), and optionally add a URL before saving. Press Ctrl+Enter (or ⌘+Enter on Mac) to save quickly.

The share target also accepts files — images (JPEG, PNG, GIF, WebP, SVG), PDFs, and plain text files.
Rate Limiting
Each API key is subject to per-minute rate limits to protect system stability. When you exceed the limit, Sylva returns a 429 Too Many Requests response with a Retry-After header indicating how many seconds to wait before sending another request.
{
"error": "rate_limited",
"message": "Too many requests. Try again in 45 seconds.",
"retry_after": 45
}
Rate limits apply per API key, not per account. If you need higher throughput, generate separate keys for different integrations so their limits are independent.
Recent Activity Log
The activity log shows you what's coming into Sylva through all intake channels — and whether it landed successfully.

Go to Settings > Integrations and scroll to the Recent Activity section. Each entry shows:
- Source — which channel delivered it (API, email, GitHub, share)
- Title — the item title or a content preview
- Timestamp — when Sylva received it
- Status indicator — one of four states:
- Ingested — processed successfully
- Duplicate — skipped because an identical item already exists
- Error — something went wrong (hover or click for details)
- Rate Limited — rejected because the API key hit its per-minute limit
Use this log as your first stop when debugging an integration. If an item shows Error, the detail message usually tells you exactly what to fix.
Troubleshooting
Authentication failures (401 responses)
- Verify the API key is copied correctly — no extra spaces or line breaks
- Check that the key hasn't been revoked in Settings > Integrations
- If using the
Authorizationheader, confirm the format isBearer sk_...with a space after "Bearer"
GitHub webhooks not arriving
- Confirm the Webhook Secret in Sylva matches the secret you entered in GitHub exactly. A mismatch causes silent rejection — GitHub shows a delivery failure in its webhook logs
- Check that Content type is set to
application/jsonin GitHub (notapplication/x-www-form-urlencoded) - In your GitHub repo's Settings > Webhooks, click the webhook and check Recent Deliveries for error details
Duplicate items when you expect new ones
- Sylva's deduplication hashes the content. If you're sending test data with identical content, change the body text slightly between attempts
- For email intake, deduplication uses subject + sender + body. Forwarding the same email with a different subject line creates a new item
Rate limit errors during bulk sends
- Batch multiple items into a single request using the
capturesarray instead of sending one request per item - Space out requests and respect the
Retry-Afterheader value in 429 responses
Quick Capture not appearing in the share sheet (mobile)
- Make sure Sylva is installed as a PWA — visit the app in your mobile browser and use Add to Home Screen or Install App
- On Android, the share target registers when the PWA is installed. Try uninstalling and reinstalling if it doesn't appear