Skip to main content

Intake System

Bring information into Sylva from external tools using API keys, email forwarding, GitHub webhooks, and mobile share.

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.

Intake settings page

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:

  1. Go to Settings > Integrations and find the Intake API Keys section
  2. Click Generate Key
  3. Give the key a descriptive name — something like "Zapier automation" or "Build server" — so you can identify it later
  4. Copy the key immediately. Sylva shows it only once

Generating a new API key

You can authenticate requests in two ways:

  • Bearer token — Pass the key in the Authorization header: Authorization: Bearer sk_your_key_here
  • Query parameter — Append ?key=sk_your_key_here to 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:

FieldTypeRequiredDescription
capturesarrayYesOne or more items to ingest
captures[].contentstringYesThe main text content
captures[].sourcestringNoWhere this came from — e.g. "slack", "email", "manual"
captures[].titlestringNoA short label for the item
captures[].contextstringNo"work" or "personal". Defaults to "work"
captures[].source_urlstringNoA URL associated with the content
captures[].captured_atstringNoISO 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.

Email intake section

To set it up:

  1. Go to Settings > Integrations and find the Email Intake section
  2. Toggle Enable Email Intake on
  3. Copy your unique intake address — it looks something like intake-a1b2c3@sylva.ai
  4. 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.

GitHub webhook configuration

To configure a webhook:

  1. In Settings > Integrations, find the GitHub Webhooks section
  2. Copy the Webhook URL shown there
  3. In your GitHub repository, go to Settings > Webhooks > Add webhook
  4. Paste the Sylva webhook URL into the Payload URL field
  5. Set Content type to application/json
  6. Enter the Webhook Secret shown in Sylva into the Secret field in GitHub. This secret verifies that payloads actually come from GitHub
  7. 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.

Quick Capture page

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.

Recent activity log

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 Authorization header, confirm the format is Bearer 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/json in GitHub (not application/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 captures array instead of sending one request per item
  • Space out requests and respect the Retry-After header 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

Was this helpful?