Omnichannel communications platform
Full LLM thinking from the 4-phase benchmark pipeline.
{
"service_type": "rest_api",
"base_url": "https://{region}.platform.bird.com",
"auth_method": "bearer_token",
"auth_config": {
"header": "Authorization",
"prefix": "Bearer"
},
"endpoints": [
{
"path": "/health",
"method": "GET",
"purpose": "Service health check",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/messages",
"method": "POST",
"purpose": "Send transactional or marketing emails with explicit recipients",
"params": {
"to": {
"type": "array",
"required": true
},
"cc": {
"type": "array",
"required": false
},
"bcc": {
"type": "array",
"required": false
},
"category": {
"type": "string",
"required": true
}
},
"response_format": "json",
"is_primary": true
},
{
"path": "/v1/email/broadcasts",
"method": "POST",
"purpose": "Create an email broadcast as a draft",
"params": {},
"response_format": "json",
"is_primary": true
},
{
"path": "/v1/email/broadcasts/{id}/send",
"method": "POST",
"purpose": "Send a scheduled or drafted email broadcast to an audience",
"params": {
"id": {
"type": "string",
"required": true
}
},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/broadcasts/{id}",
"method": "DELETE",
"purpose": "Cancel a scheduled or in-progress email broadcast",
"params": {
"id": {
"type": "string",
"required": true
}
},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/broadcasts/{id}/recipients",
"method": "GET",
"purpose": "List delivery state of a broadcast's recipients",
"params": {
"id": {
"type": "string",
"required": true
}
},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/contacts",
"method": "GET",
"purpose": "List email contacts in workspace",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/contacts",
"method": "POST",
"purpose": "Create an email contact with optional custom properties",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/audiences",
"method": "GET",
"purpose": "List email audiences",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/audiences",
"method": "POST",
"purpose": "Create an email audience",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/email/stats",
"method": "GET",
"purpose": "Get email analytics (daily, hourly, tags, KPI summary)",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/sms/messages",
"method": "POST",
"purpose": "Send SMS message to one recipient",
"params": {
"body": {
"type": "string",
"required": true
},
"category": {
"type": "string",
"required": true
}
},
"response_format": "json",
"is_primary": true
},
{
"path": "/v1/sms/messages",
"method": "GET",
"purpose": "List SMS messages and delivery status",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/sms/templates",
"method": "GET",
"purpose": "List available SMS templates",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/tcr/brands",
"method": "POST",
"purpose": "Register a 10DLC brand for US A2P SMS",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/tcr/brands",
"method": "GET",
"purpose": "List registered 10DLC brands",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/tcr/campaigns",
"method": "POST",
"purpose": "Register a 10DLC campaign under a brand",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/tcr/campaigns",
"method": "GET",
"purpose": "List registered 10DLC campaigns",
"params": {},
"response_format": "json",
"is_primary": false
},
{
"path": "/v1/sms/stats",
"method": "GET",
"purpose": "Get SMS analytics",
"params": {},
"response_format": "json",
"is_primary": false
}
],
"pricing_```json
{
"tests": [
{
"name": "health_check_connectivity",
"endpoint": "/health",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns JSON with status 'ok' confirming service connectivity",
"metrics": ["latency", "status_code"],
"validation": {"field": "status", "type": "string", "value": "ok"}
},
{
"name": "auth_invalid_token",
"endpoint": "/v1/workspace",
"method": "GET",
"headers": {"Authorization": "Bearer invalid-token-value"},
"payload": {},
"expected_status": 401,
"intent": "auth",
"expected_behavior": "Returns 401 with an 'auth_error' structured body when an invalid/missing bearer token is provided",
"metrics": ["status_code", "accuracy"],
"validation": {"field": "error.type", "type": "string", "value": "auth_error"}
},
{
"name": "auth_missing_token",
"endpoint": "/v1/workspace",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 401,
"intent": "auth",
"expected_behavior": "Returns 401 with a structured error when no Authorization header is provided",
"metrics": ["status_code", "accuracy"],
"validation": {"field": "error.type", "type": "string", "value": "auth_error"}
},
{
"name": "email_messages_send_happy_path",
"endpoint": "/v1/email/messages",
"method": "POST",
"headers": {"Idempotency-Key": "bench-email-send-1"},
"payload": {
"from": {"email": "onboarding@messagebird.dev", "name": "Bird"},
"to": [{"email": "delivered@messagebird.dev", "name": "Jane Doe"}],
"subject": "Hello from Prowl Benchmark",
"text": "This is a benchmark email."
},
"expected_status": 202,
"intent": "happy_path",
"expected_behavior": "Returns 202 Accepted with a message containing an 'em_' prefixed ID, indicating acceptance for async delivery",
"metrics": ["latency", "status_code", "accuracy"],
"validation": {"field": "id", "type": "string", "pattern": "^em_"}
},
{
"name": "email_messages_send_missing_subject",
"endpoint": "/v1/email/messages",
"method": "POST",
"headers": {},
"payload": {
"from": {"email": "onboarding@messagebird.dev"},
"to": [{"email": "delivered@messagebird.dev"}],
"html": "<p>No subject here</p>"
},
"expected_status": 422,
"intent": "validation",
"expected_behavior": "Returns 422 with a structured validation error since a subject is required for inline content",
"metrics": ["status_code", "accuracy"],
"validation": {"field": "error.type", "type": "string", "value": "validation_error"}
},
{
"name": "email_messages_send_invalid_from",
"endpoint": "/v1/email/messages",
"method": "POST",
"headers": {},
"payload": {
"from": {"email": "invalid@unverified-domain.com"},
"to": [{"email": "delivered@messagebird.dev"}],
"subject": "Test",
"html": "<p>Test body</p>"
},
"expected_status": 422,
"intent": "validation",
"expected_behavior": "Returns 422 with a structured validation/business error naming the failed 'from' domain since it is not verified",
"metrics": ["status_code", "accuracy"],
"validation": {"field": "error.type", "type": "string", "value": "validation_error"}
},
{
"name": "email_messages_list_happy_path",
"endpoint": "/v1/email/messages",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns 200 with a list of recently sent email messages and pagination cursors",
"metrics": ["latency", "status_code"],
"validation": {"field": "data", "type": "array"}
},
{
"name": "sms_messages_send_happy_path",
"endpoint": "/v1/sms/messages",
"method": "POST",
"headers": {"Idempotency-Key": "bench-sms-send-1"},
"payload": {
"to": "+31612345678",
"text": "Hello from Prowl Benchmark!",
"category": "transactional"
},
"expected_status": 202,
"intent": "happy_path",
"expected_behavior": "Returns 202 Accepted with a message containing an 'sms_' prefixed ID AND a segments object showing expected message segmentation, indicating acceptance for async delivery",
"metrics": ["latency", "status_code", "accuracy"],
"validation": {"field": "id", "type": "string", "pattern": "^sms_"}
},
{
"name": "sms_messages_send_required_field_validation",
"endpoint": "/v1/sms/messages",
"method": "POST",
"headers": {},
"payload": {
"to": "+31612345678",
"text": "This is missing a category"
},
"expected_status": 422,
"intent": "validation",
"expected0/14 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| health_check_connectivity | GET /health | None | 1ms |
| auth_invalid_token | GET /v1/workspace | None | 7ms |
| auth_missing_token | GET /v1/workspace | None | 1ms |
| email_messages_send_happy_path | POST /v1/email/messages | None | 1ms |
| email_messages_send_missing_subject | POST /v1/email/messages | None | 1ms |
| email_messages_send_invalid_from | POST /v1/email/messages | None | 1ms |
| email_messages_list_happy_path | GET /v1/email/messages | None | 1ms |
| sms_messages_send_happy_path | POST /v1/sms/messages | None | 11ms |
| sms_messages_send_required_field_validation | POST /v1/sms/messages | None | 1ms |
| sms_templates_list_happy_path | GET /v1/sms/templates | None | 4ms |
{"model": "deepseek", "data": {"overall": 0, "dimensions": {"token_efficiency": 5.0, "first_try_success": 0.0, "response_parseability": 0.0, "error_clarity": 0.0, "doc_quality": 5.0, "auth_simplicity": 3.0, "latency": 0.0, "consistency": 0.0}, "pricing_normalized": {"cost_per_1k_requests": null, "cost_per_1m_input_tokens": null, "cost_per_1m_output_tokens": null, "free_tier_requests": null, "estimated_monthly_cost_light": null, "estimated_monthly_cost_heavy": null}, "issues": [{"severity": "critical", "detail": "Benchmark used wrong base URL \u2014 got DNS resolution errors instead of JSON API responses. All 14 requests failed with '[Errno -2] Name or service not known', indicating the test runner used an incorrect/unresolvable host, not that the service is broken.", "endpoint": "/health, /v1/email/messages, /v1/sms/messages, /v1/email/contacts, /v1/email/audiences, /v1/email/stats/summary, /v1/sms/stats/summary"}], "recommendations": ["Re-run the benchmark suite using the correct API base URL from the vendor's official API reference documentation.", "Verify the hostname resolves (e.g., check DNS records and reachability) before executing tests.", "Add a pre-flight connectivity check against /health to verify the endpoint is reachable before running the full benchmark.", "Consider the service may be a self-hosted or private deployment only \u2014 confirm access credentials and network path before scoring the API."]}}Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.
<a href="https://prowl.world/service/bird">
<img src="https://prowl.world/badge/bird.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard