VCurl — implementation brief for AI agents ============================================================ A quickstart for building against the VCurl API: the common calls, with copy-paste examples. For the FULL reference — every endpoint, field and response shape, plus update/delete, filters, pagination and more — read the OpenAPI spec: https://staging.vcurl.app/docs/api.json (browsable UI: https://staging.vcurl.app/docs/api) == GET A KEY (read first) == Bearer tokens. You (the agent) must NOT invent, guess or reuse a credential — ask your human to create a scoped API token in their dashboard (for a game, a one-click "submit key") and paste it back. Send it on every request: Authorization: Bearer Scope each token to what you need (request the narrowest set): links:* pastes:* countdowns:* files:* trackers:* bins:* emailbins:* (each :read :write :analytics/…) forms:read/write/submissions/submit · polls:read/write/votes/submit · games:read/write/submit availability:read/write/responses/submit · ddns:read/write/update (dynamic DNS names) gitconcierge:read/write/submit (support desks & tickets) · sendbrand:read/write (SendBrand brands & email signatures) site-association:read/write · metrics:read mirrors:read/write · scrobbles:read (ScrobbleWith) · secretgifts:read/write (SecretGifts) [per-user — GLOBAL base] Check what a token can do: GET https://staging.vcurl.app/api/v1/token (any token, no ability needed) BASE URLS: global https://staging.vcurl.app/api/v1 · team-scoped https://.staging.vcurl.app/api/v1 THE HOST IS PART OF THE ROUTE — a team-scoped path exists ONLY on the team subdomain, and a global path ONLY on the root host. Calling one on the wrong host is a 404/405, not a 401, so it reads like the endpoint is missing when it is really the hostname. /api/v1/token is global (root host); everything team-scoped below — links, pastes, games, scoreboards, forms, brands, support desks — needs https://.staging.vcurl.app. Check the base URL before you debug anything. == BEFORE YOU BUILD: THERE MAY BE NOTHING TO BUILD == This document is for WRITING CODE against the API. If your human's goal is simply to *use* VCurl through you — "show me my open tickets", "shorten this link", "update the brand colours" — do NOT implement a client. Connect to an MCP server instead and call its tools. Same tokens, same permissions, no integration code, and the tool descriptions tell you the arguments so there is nothing to look up here. Transport: streamable HTTP, POST. Auth: Authorization: Bearer , as above. https://staging.vcurl.app/mcp/vcurl links, pastes, countdowns, files, trackers, bins, forms, polls, availability, games & scoreboards (team-scoped) https://staging.vcurl.app/mcp/gitconcierge support desks, tickets, replies, changelogs (team-scoped) https://staging.vcurl.app/mcp/sendbrand brand guides & email signatures (team-scoped) https://staging.vcurl.app/mcp/scrobble mirrors & scrobbles (per-user) https://staging.vcurl.app/mcp/secretgifts gift exchanges (per-user) https://staging.vcurl.app/mcp/user the signed-in account, its teams and activity Team-scoped servers take an optional `team` UUID argument; omit it when the human has one team. Build against the REST API when you need something the tools do not cover, when the work runs unattended, or when you are shipping a product of your own. Otherwise: connect, don't code. is your team subdomain (from the dashboard); nearly every call below is team-scoped. == WHAT YOU CAN CREATE (HOST TYPES) == Each of these is a "host" — an object you create via the API and that the public then reaches through a slug (see the next section). Base paths are team-scoped (https://.staging.vcurl.app/api/v1): Short link /team/links a branded short URL that redirects to a destination (UTM + optional rule-based routing by geo/OS/time/…) Paste /team/pastes a titled markdown document, like a pastebin Countdown /team/countdowns a live page counting to (or up from) a moment: one date, a recurrence (daily-yearly, always next instance) or a list of dates (soonest upcoming); optional style + background File /team/files one hosted upload — image/video/PDF embeds on its page, anything else downloads Tracking pixel /team/trackers a pixel or hit-counter you embed in an email or page; every load counts Request bin /team/bins a throwaway URL that captures every HTTP request sent to it (inspect a webhook) Email bin /team/emailbins a throwaway inbox address (@) that captures every email sent to it Feedback form /team/forms a public form; responses collected privately for the team Poll /team/polls a public poll; votes collected, with an optional live tally Availability /team/availabilities a "when works?" poll; people pick time slots, best common time surfaced Dynamic DNS /team/ddns a hostname (