---
name: pollenate
version: 1.0.0
description: Collect user feedback from AI agent conversations. Submit thumbs, stars, NPS, CSAT, emoji, or text feedback to Pollenate inboxes.
homepage: https://pollenate.dev
metadata:
  api_base: https://api.pollenate.dev
  openapi_url: https://pollenate.dev/openapi.yaml
  docs_url: https://pollenate.dev/docs
  category: feedback
  emoji: 🌼
---

# Pollenate — Feedback Collection for AI Agents

**Collect real-time user feedback during AI conversations.**

Pollenate lets AI agents submit structured feedback (ratings, comments, sentiment) to a centralized dashboard — so product teams can understand what users think without interrupting the conversation.

**API Base URL:** `https://api.pollenate.dev`

---

## Skill Files

| File | URL |
|------|-----|
| **SKILL.md** (this file) | `https://pollenate.dev/skill.md` |
| **skill.json** (metadata) | `https://pollenate.dev/skill.json` |
| **OpenAPI 3.1** (full spec) | `https://pollenate.dev/openapi.yaml` |

**Install locally:**
```bash
mkdir -p ~/.agent/skills/pollenate
curl -s https://pollenate.dev/skill.md > ~/.agent/skills/pollenate/SKILL.md
curl -s https://pollenate.dev/skill.json > ~/.agent/skills/pollenate/skill.json
```

---

## When to Use This Skill

Use Pollenate when you want to:

- **Capture user satisfaction** after completing a task ("Was this helpful?")
- **Log conversation quality** ratings on behalf of the user
- **Collect NPS/CSAT scores** during support interactions
- **Record free-text feedback** about a product, feature, or experience
- **Track sentiment** across sessions with context metadata

**Example triggers** (when the user says something like):
- "This was really helpful, thanks!"
- "I'm frustrated with this feature"
- "Rate this interaction"
- "Submit feedback about the product"
- "That's exactly what I needed"

---

## Authentication

All requests require an API key passed in the `X-Pollenate-Key` header:

```bash
curl https://api.pollenate.dev/collect \
  -H "X-Pollenate-Key: YOUR_API_KEY"
```

API keys are created in the [Pollenate Dashboard](https://pollenate.dev) under **Settings → API Keys**. Keys must have the `collect` scope.

> **Security:** Only send your API key to `https://api.pollenate.dev`. Never log or expose it.

---

## Submit Feedback

**`POST https://api.pollenate.dev/collect`**

This is the primary endpoint. Send a JSON payload with the feedback data.

### Request

```bash
curl -X POST https://api.pollenate.dev/collect \
  -H "Content-Type: application/json" \
  -H "X-Pollenate-Key: YOUR_API_KEY" \
  -d '{
    "inboxKey": "support-chat",
    "type": "thumbs",
    "score": 1,
    "comment": "The agent resolved my issue quickly",
    "context": {
      "source": "ai-agent",
      "agentName": "MyAssistant",
      "conversationTopic": "billing-question"
    }
  }'
```

### Response

```json
{
  "id": "a1b2c3d4e5f6...",
  "success": true
}
```

---

## Payload Reference

| Field | Required | Type | Description |
|-------|----------|------|-------------|
| `inboxKey` | **Yes** | `string` | Identifies the feedback inbox (e.g., `"support-chat"`, `"product-feedback"`) |
| `type` | **Yes** | `string` | Feedback type — see types below |
| `score` | No | `number` | Numeric score (0–10), meaning depends on type |
| `comment` | No | `string` | Free-text comment, max 2000 characters |
| `context` | No | `object` | Arbitrary metadata (source, agent name, topic, user ID, etc.) |
| `sessionId` | No | `string` | Correlate multiple events in the same conversation |
| `pageUrl` | No | `string` | Page or resource URL if applicable |
| `userAgent` | No | `string` | User agent string (auto-detected if omitted) |
| `impressionId` | No | `string` | Link to a prior widget impression |

---

## Feedback Types

| Type | Score Range | Best For | Example |
|------|------------|----------|---------|
| `thumbs` | 0 (down) or 1 (up) | Quick binary feedback | "Was this helpful?" → 👍 |
| `stars` | 1–5 | Quality rating | "Rate this response" → ⭐⭐⭐⭐ |
| `emoji` | 1–5 | Sentiment capture | 😞 😐 🙂 😄 🤩 |
| `nps` | 0–10 | Net Promoter Score | "How likely to recommend?" |
| `csat` | 1–5 | Customer satisfaction | "How satisfied are you?" |
| `text` | — | Free-text only | Open-ended comments |

---

## Usage Examples

### After resolving a user's issue
```bash
curl -X POST https://api.pollenate.dev/collect \
  -H "Content-Type: application/json" \
  -H "X-Pollenate-Key: YOUR_API_KEY" \
  -d '{
    "inboxKey": "support-chat",
    "type": "thumbs",
    "score": 1,
    "comment": "Issue resolved successfully",
    "context": {
      "source": "ai-agent",
      "agentName": "SupportBot",
      "resolution": "password-reset"
    }
  }'
```

### Capturing NPS during a conversation
```bash
curl -X POST https://api.pollenate.dev/collect \
  -H "Content-Type: application/json" \
  -H "X-Pollenate-Key: YOUR_API_KEY" \
  -d '{
    "inboxKey": "nps-survey",
    "type": "nps",
    "score": 9,
    "comment": "Love the product, just wish onboarding were faster",
    "sessionId": "conv_2025_abc123"
  }'
```

### Logging user sentiment from conversation tone
```bash
curl -X POST https://api.pollenate.dev/collect \
  -H "Content-Type: application/json" \
  -H "X-Pollenate-Key: YOUR_API_KEY" \
  -d '{
    "inboxKey": "sentiment-tracker",
    "type": "emoji",
    "score": 4,
    "context": {
      "source": "ai-agent",
      "detectedSentiment": "positive",
      "conversationTurns": 12
    }
  }'
```

### Free-text product feedback
```bash
curl -X POST https://api.pollenate.dev/collect \
  -H "Content-Type: application/json" \
  -H "X-Pollenate-Key: YOUR_API_KEY" \
  -d '{
    "inboxKey": "product-feedback",
    "type": "text",
    "comment": "Users are frequently asking for dark mode support"
  }'
```

---

## Best Practices for AI Agents

1. **Ask before submitting.** Always confirm with the user before sending feedback on their behalf. Example: _"Would you like me to submit that as feedback to the team?"_

2. **Use context liberally.** The `context` object accepts any key-value pairs. Include useful metadata:
   ```json
   {
     "source": "ai-agent",
     "agentName": "YourAgentName",
     "agentModel": "gpt-4o",
     "conversationId": "abc123",
     "topic": "billing",
     "userLocale": "en-US"
   }
   ```

3. **Use sessionId for multi-turn conversations.** If a user provides multiple pieces of feedback in one conversation, use the same `sessionId` to group them.

4. **Choose the right type.** Use `thumbs` for quick yes/no, `stars`/`emoji` for quality ratings, `nps` for loyalty, `csat` for satisfaction, and `text` for open-ended feedback.

5. **Respect rate limits.** Plan limits vary (100–1M feedback/day). If you get a `429` response, respect the `retryAfter` value.

---

## Using the Context Field

The `context` field is a flexible JSON object for metadata. Suggested keys for AI agents:

| Key | Description | Example |
|-----|-------------|---------|
| `source` | Where the feedback originated | `"ai-agent"`, `"chatbot"`, `"slack-bot"` |
| `agentName` | Name of the AI agent | `"SupportBot"` |
| `agentModel` | Model powering the agent | `"claude-sonnet-4"`, `"gpt-4o"` |
| `conversationId` | Unique conversation identifier | `"conv_abc123"` |
| `topic` | Conversation topic or category | `"billing"`, `"onboarding"` |
| `userId` | External user identifier | `"user_456"` |
| `userLocale` | User's language/locale | `"en-US"` |
| `detectedSentiment` | AI-detected sentiment | `"positive"`, `"neutral"`, `"negative"` |
| `resolution` | How the issue was resolved | `"answered"`, `"escalated"`, `"self-service"` |

---

## Error Handling

| Status | Code | Meaning |
|--------|------|---------|
| `400` | Validation error | Missing or invalid fields — check `details` array |
| `401` | Unauthorized | Missing or invalid API key |
| `403` | Forbidden | API key lacks `collect` scope or wrong organization |
| `404` | Not found | Invalid `inboxKey` |
| `429` | Rate limited | Daily plan limit reached — check `retryAfter` |

**Error response format:**
```json
{
  "error": "Description of what went wrong",
  "details": [{"field": "type", "message": "Invalid enum value"}]
}
```

---

## Rate Limits

| Plan | Feedback/day | API requests/min |
|------|-------------|-----------------|
| Trial | 100 | 60 |
| Starter | 1,000 | 120 |
| Growth | 10,000 | 300 |
| Enterprise | 1,000,000 | 1,000 |

Rate limit headers are included on every response:
- `X-RateLimit-Limit` — Max requests per window
- `X-RateLimit-Remaining` — Requests remaining
- `X-RateLimit-Reset` — Seconds until reset

---

## OpenAPI Specification

For agents that can parse OpenAPI specs, use the full structured spec:

| Format | URL |
|--------|-----|
| **OpenAPI 3.1 YAML** | `https://pollenate.dev/openapi.yaml` |
| **Swagger UI** (interactive) | `https://api.pollenate.dev/docs` |

---

## Getting Started

1. **Sign up** at [pollenate.dev](https://pollenate.dev)
2. **Create an organization** and a brand
3. **Create an inbox** (e.g., `"support-chat"`)
4. **Generate an API key** with `collect` scope
5. **Start submitting feedback** using the examples above

---

## Organization Hierarchy

```
Organization (your company)
  └── Brand (product line)
       └── Inbox (feedback endpoint, identified by inboxKey)
```

Each API key belongs to an organization and can optionally be scoped to a specific brand.

---

_Pollenate — Feedback that grows with your product. 🌼_
