API REFERENCE
List coding agent Slack tags (admin)
On this page
/api/admins/coding/slackReturns a list of Slack mentions of the Recoup Coding Agent bot, pulled directly from the Slack API as the source of truth. Each entry includes the tagger's information, the prompt they sent, the timestamp, the channel, and any GitHub pull request URLs opened in response. Also returns aggregate pull request statistics. Supports optional time-period filtering. Requires the authenticated account to be a Recoup admin. Authentication via x-api-key or Authorization Bearer token. Optional tag filters by the exact, case-sensitive Slack author ID after trimming whitespace. Filtering happens after the existing period collection and before all totals are calculated; omission preserves the unfiltered report, and an unknown ID returns empty tags with zero totals. Empty or whitespace-only tag values return 400 after admin authentication. This is display filtering, not authorization or a reduction in Slack collection work. Collection retains its existing channel access, retention, history/thread pagination and partial-failure limits. No automatic caller, UI, polling, scheduled action or Slack send is added.
Authentication
x-api-key in header
bearerAuth bearer
Request
curl --request GET \
--url 'https://api.recoupable.dev/api/admins/coding/slack' \
--header 'x-api-key: YOUR_API_KEY'Replace the YOUR_ placeholders with your values. Required query parameters are included; optional parameters are listed below.
Try it
Fill in the fields, send the request from your browser, and read the live response. The curl below updates as you type.
Kept in this browser tab only and cleared when it closes.
curl --request GET \
--url 'https://api.recoupable.dev/api/admins/coding/slack'Parameters
Query parameters
periodstring · enumTime period to filter tags. One of: all (no date filter), daily (last 24 hours), weekly (last 7 days), monthly (last 30 days). Defaults to all.
Values: "all", "daily", "weekly", "monthly"
Default: "all"
tagstringOptional exact, case-sensitive Slack author ID. Leading/trailing whitespace is trimmed; blank values are rejected. This filters already collected mentions before the totals are computed and does not change access or collection work.
Responses
200Slack tag analytics retrieved successfully+
application/json
statusstring · enumrequiredStatus of the request
Values: "success"
totalintegerrequiredNumber of collected Coding Agent mentions after the requested period and optional author filter.
Example: 134
total_pull_requestsintegerrequiredNumber of pull request links across the filtered collected mentions.
Example: 121
tags_with_pull_requestsintegerrequiredNumber of filtered collected mentions with at least one pull request link.
Example: 84
tagsarray<object>requiredList of Slack tag events
Item properties for tags
user_idstringrequiredSlack ID of the person who tagged the agent
Example: "U012AB3CD"
user_namestringrequiredDisplay name of the person who tagged the agent
Example: "Jane Smith"
user_avatarstring | nullURL of the Slack avatar
Example: "https://avatars.slack-edge.com/..."
promptstringrequiredThe text of the message sent to the agent
Example: "add dark mode support to the settings page"
timestampstringrequiredISO 8601 timestamp of the tag event
Example: "2024-01-15T10:30:00.000Z"
format: date-time
channel_idstringrequiredSlack channel ID where the tag occurred
Example: "C012AB3CD"
channel_namestringrequiredHuman-readable name of the Slack channel
Example: "dev-team"
pull_requestsarray<string>GitHub pull request URLs opened by the Coding Agent in response to this prompt, parsed from bot replies in the Slack thread
Example: ["https://github.com/recoupable/api/pull/42"]
Item properties for pull_requests
string
400Invalid period or empty/whitespace-only tag; validation follows admin authentication and stops before Slack collection.+
application/json
statusstring · enumrequiredValues: "error"
errorstringrequiredThe first invalid query field or authentication-mechanism error.
401Missing, conflicting or invalid credentials; inspect error or message according to the returned authentication envelope.+
application/json
oneOf · AdminCodingSlackQueryError 1
statusstring · enumrequiredValues: "error"
errorstringrequiredThe first invalid query field or authentication-mechanism error.
oneOf · AccountErrorResponse 2
statusstring · enumrequiredStatus of the request
Values: "error"
messagestringrequiredError message describing what went wrong
403Forbidden - authenticated account is not a Recoup admin+
application/json
statusstring · enumrequiredStatus of the request
Values: "error"
messagestringrequiredError message describing what went wrong
500Internal server error+
application/json
statusstring · enumrequiredStatus of the request
Values: "error"
messagestringrequiredError message describing what went wrong
Full specification
Download the OpenAPI file for complete schemas, constraints, and examples.
Download accounts.jsonView operation source
{
"operationId": "getAdminsCodingSlack",
"description": "Returns a list of Slack mentions of the Recoup Coding Agent bot, pulled directly from the Slack API as the source of truth. Each entry includes the tagger's information, the prompt they sent, the timestamp, the channel, and any GitHub pull request URLs opened in response. Also returns aggregate pull request statistics. Supports optional time-period filtering. Requires the authenticated account to be a Recoup admin. Authentication via x-api-key or Authorization Bearer token. Optional tag filters by the exact, case-sensitive Slack author ID after trimming whitespace. Filtering happens after the existing period collection and before all totals are calculated; omission preserves the unfiltered report, and an unknown ID returns empty tags with zero totals. Empty or whitespace-only tag values return 400 after admin authentication. This is display filtering, not authorization or a reduction in Slack collection work. Collection retains its existing channel access, retention, history/thread pagination and partial-failure limits. No automatic caller, UI, polling, scheduled action or Slack send is added.",
"parameters": [
{
"name": "period",
"in": "query",
"description": "Time period to filter tags. One of: all (no date filter), daily (last 24 hours), weekly (last 7 days), monthly (last 30 days). Defaults to all.",
"required": false,
"schema": {
"type": "string",
"enum": [
"all",
"daily",
"weekly",
"monthly"
],
"default": "all"
}
},
{
"name": "tag",
"in": "query",
"description": "Optional exact, case-sensitive Slack author ID. Leading/trailing whitespace is trimmed; blank values are rejected. This filters already collected mentions before the totals are computed and does not change access or collection work.",
"required": false,
"schema": {
"type": "string",
"minLength": 1,
"pattern": "\\S"
},
"example": "U2"
}
],
"security": [
{
"apiKeyAuth": []
},
{
"bearerAuth": []
}
],
"responses": {
"200": {
"description": "Slack tag analytics retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"status",
"total",
"total_pull_requests",
"tags_with_pull_requests",
"tags"
],
"properties": {
"status": {
"type": "string",
"enum": [
"success"
],
"description": "Status of the request"
},
"total": {
"type": "integer",
"description": "Number of collected Coding Agent mentions after the requested period and optional author filter.",
"example": 134
},
"total_pull_requests": {
"type": "integer",
"description": "Number of pull request links across the filtered collected mentions.",
"example": 121
},
"tags_with_pull_requests": {
"type": "integer",
"description": "Number of filtered collected mentions with at least one pull request link.",
"example": 84
},
"tags": {
"type": "array",
"description": "List of Slack tag events",
"items": {
"type": "object",
"required": [
"user_id",
"user_name",
"prompt",
"timestamp",
"channel_id",
"channel_name"
],
"properties": {
"user_id": {
"type": "string",
"description": "Slack ID of the person who tagged the agent",
"example": "U012AB3CD"
},
"user_name": {
"type": "string",
"description": "Display name of the person who tagged the agent",
"example": "Jane Smith"
},
"user_avatar": {
"type": [
"string",
"null"
],
"description": "URL of the Slack avatar",
"example": "https://avatars.slack-edge.com/..."
},
"prompt": {
"type": "string",
"description": "The text of the message sent to the agent",
"example": "add dark mode support to the settings page"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp of the tag event",
"example": "2024-01-15T10:30:00.000Z"
},
"channel_id": {
"type": "string",
"description": "Slack channel ID where the tag occurred",
"example": "C012AB3CD"
},
"channel_name": {
"type": "string",
"description": "Human-readable name of the Slack channel",
"example": "dev-team"
},
"pull_requests": {
"type": "array",
"description": "GitHub pull request URLs opened by the Coding Agent in response to this prompt, parsed from bot replies in the Slack thread",
"items": {
"type": "string",
"format": "uri",
"example": "https://github.com/recoupable/api/pull/42"
},
"example": [
"https://github.com/recoupable/api/pull/42"
]
}
}
}
}
}
}
}
}
},
"400": {
"description": "Invalid period or empty/whitespace-only tag; validation follows admin authentication and stops before Slack collection.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdminCodingSlackQueryError"
}
}
}
},
"401": {
"description": "Missing, conflicting or invalid credentials; inspect error or message according to the returned authentication envelope.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdminCodingSlackAuthenticationError"
}
}
}
},
"403": {
"description": "Forbidden - authenticated account is not a Recoup admin",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AccountErrorResponse"
}
}
}
},
"500": {
"description": "Internal server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AccountErrorResponse"
}
}
}
}
}
}