{"audit":{"version":"1.5","generated_at":"2026-10-01T10:37:00.054327+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/skedcast.com","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"skedcast.com","name":"SkedCast","url":"https://skedcast.com/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"SkedCast","url":"https://skedcast.com"},"registry_verification":null,"signature":{"signed":false,"signature_valid":null}},"protocol":{"version":null,"supports_streaming":false,"supports_push_notifications":false},"operational":{"live_state":"wrong_response","live_responds":false,"last_status_code":200,"last_elapsed_ms":108,"last_error":null},"track_record":{"first_seen":"2026-10-01T08:46:14.850157+00:00","last_checked":"2026-10-01T08:46:14.850157+00:00","last_seen_ok":"2026-10-01T08:46:14.850157+00:00","checks_total":1,"checks_ok":1,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":1,"archived":false,"archived_reason":null},"conformance":{"score":34,"grade":"F","summary":"F-grade: card is reachable but fails most operational signals.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":5,"max_points":25,"status":"fail","detail":"Endpoint replies but body isn't a valid JSON-RPC 2.0 A2A response."},{"key":"protocol_version","label":"Protocol version","points":0,"max_points":10,"status":"fail","detail":"No protocolVersion in card."},{"key":"signature","label":"JWS signature","points":0,"max_points":10,"status":"info","detail":"Card is unsigned (most published agents are)."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 1 probe so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 60 skills with structured metadata. 60 skills without tags — optional in 0.x, REQUIRED once you move the card to v1.0."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: SkedCast (https://skedcast.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":4,"max_points":5,"status":"pass","detail":"seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":0,"max_points":5,"status":"info","detail":"Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://skedcast.com/.well-known/agent-card.json"},"skills":[{"id":"list_scheduled_posts","name":"list_scheduled_posts","description":"List the workspace's posts (queue, drafts, published) newest-first, with optional status / client / platform filters and free-text search (`q`) over captions, per-platform overrides, client names and account handles.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_post_targets","name":"list_post_targets","description":"List individual post DESTINATIONS (one row per platform account) with optional status / client / account / platform / free-text filters and a SCHEDULE-time window — the tool for \"what publishes on this date\". Carries `total` and `totalPosts`, so a caller can tell a full page from a complete set.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_post","name":"get_post","description":"Get one post with its per-platform variants and fan-out targets.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_clients","name":"list_clients","description":"List the workspace's client groups (brands / influencers).","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_accounts","name":"list_accounts","description":"List connected social accounts, optionally filtered by client or platform.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_analytics_overview","name":"get_analytics_overview","description":"Reach / impressions / engagement plus a per-platform rollup over a date window.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_post_analytics","name":"get_post_analytics","description":"Per-post performance (complements get_analytics_overview): one post’s lifetime per-target breakdown by postId, or a keyset page of per-post rows with filters.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_account_analytics","name":"get_account_analytics","description":"One channel’s totals and daily series, plus the two things no other tool carries: profile-level activity (profile views, link taps, video plays) and follower demographics.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_library_assets","name":"list_library_assets","description":"List content-library (DAM) assets with optional kind / folder / label / client / status / search filters. Filter `status: \"transcoded\"` for assets that are actually publishable; every row also carries `status`, `publishable` and `ready`.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_capabilities","name":"get_capabilities","description":"The per-platform composing rulebook: caption and hashtag limits, media rules per kind (counts, formats, file-size ceiling, duration bounds, aspect ratios), post types, native-scheduling window, default cadence, first-comment support, and the `variants[].overrides` keys each platform requires or accepts. Read it before composing instead of discovering a limit by failing a publish.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_agency","name":"get_agency","description":"The current workspace profile — name, plan, app mode, settings, and the caller’s role.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_reports","name":"list_reports","description":"List the workspace's saved analytics report definitions.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_best_times","name":"get_best_times","description":"Worker-derived best posting times (strongest-first), optionally by client / platform.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_approvals","name":"list_approvals","description":"List the workspace's approval queue (pending and decided requests), newest-first, with optional status / post filters.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_posting_limits","name":"get_posting_limits","description":"Anti-ban posting limits (cadence): one account by socialAccountId, or every active channel plus the tenant bypass flag when omitted.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_quota","name":"get_quota","description":"Adaptive quota pool: your scarce-bucket budget (guaranteed slice, used, burst headroom, tomorrow’s guarantee tonight, reset clock) — read before planning a batch.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_campaigns","name":"list_campaigns","description":"List the workspace's campaigns (named post groupings), optionally filtered by client / status.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"decide_approval","name":"decide_approval","description":"Approve, reject, or request changes on a pending approval request (approve releases the gated post for publishing). A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"validate_post","name":"validate_post","description":"Dry-run a compose request and get the per-platform verdict WITHOUT writing anything — same arguments as create_post, no post row and no draft. Returns `{ valid, platforms[], estimatedCostUsd }`. Does not run cadence or quota admission, so `valid: true` means the shape is acceptable, not that a publish cannot later be deferred.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"revise_post","name":"revise_post","description":"Change the CONTENT of an already-scheduled post — caption, media, cover, alt text, per-platform overrides — without disturbing its destinations. Send only what you are changing. Refuses, naming them, when a destination has already published or is about to. An edit to an APPROVED post returns it to review. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"create_post","name":"create_post","description":"Compose a post and fan it out across the selected accounts (or save it as a draft). Retry-safe: retrying with identical arguments replays the original result instead of creating a duplicate. Note: two publish-now calls with byte-identical content and targets are treated as the same post and coalesced permanently — to intentionally publish the same content twice, vary the content or use distinct scheduled times. For platform-specific settings (e.g. YouTube privacy, TikTok privacy level, Pinterest board, Telegram chat), set `variants[].overrides`. That same object carries `firstComment`: a reply posted automatically once the destination goes live, so a \"link in the comments\" post needs no manual follow-up. Supported on X, LinkedIn, YouTube, Instagram, Facebook, Threads, Telegram and Bluesky (not TikTok or Pinterest); spell it exactly `firstComment`. Overrides are free-form — an unrecognised key is accepted and silently ignored — and the comment is best-effort: if it fails the post still publishes and nothing is reported, so confirm on the published post. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"create_posts_bulk","name":"create_posts_bulk","description":"Create up to 50 posts in one call. Each item is exactly the arguments of create_post, so a bulk item carries every override a single post does (per-platform caption, title, cover, per-asset alt text, first comment, per-platform settings). Items are created one after another, each on its own: one failing never rolls back the others, and the result lists every item in order with its post id or its error. Retry-safe: retrying with identical arguments creates nothing twice. Pass validateOnly:true to check every item without writing anything. It counts one request-budget unit per item. This creates real outbound content — confirm with the user before calling. Requires the posts.compose scope.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"update_post","name":"update_post","description":"Replace a draft post in place — its content, media, targets, and schedule. Only draft posts can be updated, and this never publishes (use publish_draft for that). Platform-specific settings live in `variants[].overrides`, same as create_post, including `firstComment`. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"publish_draft","name":"publish_draft","description":"Publish or schedule an existing DRAFT post in place — same arguments as update_post plus the draft id; `schedule` decides now or later. Runs the same checks as create_post (platform validation, approval policy, quota, pacing); a client that requires approval gets the post submitted for review instead. The post keeps its id. This puts real content on connected accounts — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"import_media","name":"import_media","description":"Ingest an external image / video into the content library by URL — the file must already be reachable at a public URL. For bytes you already hold (an image you just rendered, or a local file) use `upload_media` instead. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"upload_media","name":"upload_media","description":"Upload a LOCAL image / video into the content library and get back a media id for create_post. Sends the file inline (≤18 MiB) or returns a presigned URL for larger files. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"reschedule_post","name":"reschedule_post","description":"Move a pending post target to a new time (absolute scheduledAt or relative shiftMinutes). A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"bulk_post_target_action","name":"bulk_post_target_action","description":"Reschedule, retry or cancel up to 5000 post targets in one call — the batch form of reschedule_post / retry_post / cancel_post. Returns `{ jobId, accepted, skipped, skippedReasons? }`; a skipped target is reported, never silently dropped. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"cancel_post","name":"cancel_post","description":"Cancel a still-pending post target before it publishes. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"retry_post","name":"retry_post","description":"Re-queue a failed or rate-limited post target so it publishes again. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"set_post_recycle","name":"set_post_recycle","description":"Set, update, or disable a post's evergreen recycle settings (interval / times / end date / max recycles). A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"shift_campaign","name":"shift_campaign","description":"Move a whole campaign's pending schedule by a relative number of minutes. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_webhooks","name":"list_webhooks","description":"List the workspace's outbound webhook endpoints (url, subscribed events, active flag; secret masked).","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"create_webhook","name":"create_webhook","description":"Register an outbound webhook endpoint for HMAC-signed event deliveries. Subscribe to any subset of the full 40-event catalog — see /developers/webhooks, or the `webhooks` block in openapi.json, for the complete list with payload fields. Returns the signing secret once. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"delete_webhook","name":"delete_webhook","description":"Delete an outbound webhook endpoint by id (deliveries cascade). A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"create_client","name":"create_client","description":"Create a new client group (a brand or influencer whose accounts are managed together). A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"create_connect_invite","name":"create_connect_invite","description":"Mint a shareable self-connect link so a client can connect the requested platforms themselves; returns the link and its expiry. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_webhook","name":"get_webhook","description":"Read one webhook endpoint — URL, subscribed events, active state, consecutive failures, and when/why it was auto-disabled. The signing secret is never returned here.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"list_webhook_deliveries","name":"list_webhook_deliveries","description":"The delivery log for one endpoint — each attempt with its event type, response status, error and timing. How you find out WHY an endpoint stopped receiving.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"update_webhook","name":"update_webhook","description":"Change an endpoint’s URL, event list, or active state — including re-enabling one auto-disabled after repeated failures. The event list REPLACES the previous one. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"test_webhook","name":"test_webhook","description":"Send a `webhook.test` delivery and report the outcome, proving an endpoint is reachable and verifying signatures without waiting for a real event. Performs a real outbound request — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"rotate_webhook_secret","name":"rotate_webhook_secret","description":"Mint a new signing secret and return it ONCE — it is not readable again. The previous secret keeps verifying for a short overlap so the customer can redeploy without dropping deliveries. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_campaign","name":"get_campaign","description":"Read one campaign in full — name, description, status, colour, date range, owning client and post counts.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"create_campaign","name":"create_campaign","description":"Create a campaign — a named group of posts with an optional client, colour and date range. Posts are added with assign_to_campaign. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"update_campaign","name":"update_campaign","description":"Change a campaign’s name, description, status, colour or date range. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"delete_campaign","name":"delete_campaign","description":"Delete a campaign. The posts in it are NOT deleted — they lose the grouping and keep their own schedules. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"assign_to_campaign","name":"assign_to_campaign","description":"Add up to 500 existing posts to a campaign. Grouping only — no post’s content or schedule changes. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"unassign_from_campaign","name":"unassign_from_campaign","description":"Remove posts from a campaign. Grouping only — the posts and their schedules are untouched. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_client","name":"get_client","description":"Read one client group in full — name, type, approval policy, posting rules, brand voice and default timezone.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"update_client","name":"update_client","description":"Change a client’s name, type, approval policy, posting rules, brand voice or default timezone. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"delete_client","name":"delete_client","description":"Archive a client group. OWNER ONLY — a Manager holding the clients.manage scope cannot do this. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_post_target","name":"get_post_target","description":"Read a single fan-out destination in full — status, scheduled time, platform, account, published permalink and external id, and its failure reason when it failed.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_post_recycle","name":"get_post_recycle","description":"Read one post’s evergreen re-posting configuration and the worker’s bookkeeping. Returns null when the post is not enrolled.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_account","name":"get_account","description":"Read one connected social account in full — platform, handle, display name, avatar, status (including whether it needs re-authorisation) and owning client.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_approval","name":"get_approval","description":"Read one approval request with the gated post’s preview and roll-up, so a reviewer can see what they are deciding on before calling decide_approval.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_media_asset","name":"get_media_asset","description":"Read one content-library asset in full — filename, kind, size, dimensions, duration, folder, labels, alt text, pipeline status, and the publishable/ready flags plus the per-platform readiness map.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_client_analytics","name":"get_client_analytics","description":"One client group’s analytics — totals, a per-platform breakdown and a time series. A different projection from get_analytics_overview filtered by client.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"get_report","name":"get_report","description":"Read one report definition with its run history — each run’s status, window, and whether an export is available.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"download_report_export","name":"download_report_export","description":"Get a time-limited download URL for one completed report run’s export file. The URL expires — fetch it when you are ready to use it.","tags":[],"examples":[],"inputModes":[],"outputModes":[]},{"id":"clear_post_recycle","name":"clear_post_recycle","description":"Turn OFF evergreen re-posting for a post. Idempotent. Already-scheduled recycled copies are not retracted — cancel those separately. A write action — confirm with the user before calling.","tags":[],"examples":[],"inputModes":[],"outputModes":[]}],"provenance":[{"source":"smithery","first_seen":"2026-10-01T08:46:14.850157+00:00"}],"recent_probes":[{"fetched_at":"2026-10-01T08:46:14.850157+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":108,"live_responds":false}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-01T10:37:00.061057+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/skedcast.com/evidence","dispute_url":"https://agenstry.com/agents/skedcast.com/dispute"},"verification_history":[],"signatures":[{"protected":"eyJhbGciOiJFUzI1NiIsImprdSI6Imh0dHBzOi8vYWdlbnN0cnkuY29tLy53ZWxsLWtub3duL2p3a3MuanNvbiIsImtpZCI6ImFnZW50ZmluZGVyLWVzMjU2LTEiLCJ0eXAiOiJKT1NFIn0","signature":"ucMx09Qiy9NRQDxhOpBb2AknEPxBvQ7SQAIJGmTmGpwmdP4InTyZcMATLGMxdoI628N2PZJ_kGshXffw-Ps7Nw"}]}