You don’t need this page to use Copilot. Your agent makes these calls for you. This page is for developers who want to call the API directly.
Base URL and sign-in
All endpoints are underhttps://copilot.colosseum.com/api/v2. Paths on this page are relative to it.
Every request needs a token from Colosseum’s sign-in tool. Sign in once:
token command renews your sign-in when it needs to. Don’t print its output or pass the token as a command-line argument.
Send JSON bodies with Content-Type: application/json, up to 1 MB. Send your installed skill version in the X-Copilot-Skill-Version request header on every Copilot API request; these examples use 2.0.3. Every response includes an X-Copilot-Skill-Version header with the current skill version.
Old access tokens work only on /api/v1, which covers four hackathons and not Frontier. They stop working at 00:00 UTC on October 28, 2026. An old token sent to /api/v2 gets 401 V2_SIGN_IN_REQUIRED.
Endpoints
Request and response fields are in the field reference.Your own data
GET /me returns your own Arena profile, current-hackathon registration and projects where you are an owner or member. Projects include drafts, private submission fields, teammates, update history, a public accelerator cohort and prizes after results are published. Teammates contribute only their names, usernames and Arena-visible profile fields, never email addresses. The response includes up to 200 projects and 2,000 updates across them; truncated.projects and truncated.updates show when either cap was reached. It is returned with Cache-Control: private, no-store.
Call this endpoint only when the person’s own work or history matters. It needs self-data:read (or its older alias copilot:self-data). An old token gets 401 V2_SIGN_IN_REQUIRED; a token missing the scope gets 403 INSUFFICIENT_SCOPE. Profile data that is temporarily unavailable returns 503 SERVICE_UNAVAILABLE.
Projects
- Search.
POST /search/projectsranks projects by similarity to your query. Results favor the closest matches; setdiversify: truefor more variety across hackathons and tracks. An empty query lists every project that matches your filters, newest first. - Counting. With an empty query,
totalFoundis the exact number of matching projects. With a text query,totalFoundonly supports paging, so don’t treat it as a count. CheckfiltersAppliedto see the filters that were used. - Facets. Set
includeFacets: trueand list the facets you want infacets. The default list leaves out categories. Facets count everything that matches your filters and ignore the text query. - Details. Search results leave out the summaries of each team’s code, pitch and demo. Fetch
GET /projects/by-slug/:slugfor those. - Valid values.
GET /filterslists hackathon slugs and start dates, prize track keys, submission label keys, accelerator batches, prize types, tags and research library sources. - Prizes.
awardiswinner,honorable_mentionornull.filters.winnersOnly,isWinner,winnerCountand thewinnerstotals exclude honorable mentions. Usefilters.prizeTypes: ["HONORABLE_MENTION"]to find mentions separately; they carryprize.type: "HONORABLE_MENTION"with no amount, and they’re recognitions, not wins. Frontier had no tracks: its 25TRACK_PRIZEawards namedWinnerare its top-25 awards, not track prizes. - Tracks and labels.
trackslists the prize tracks a project entered, not the one it won. The track a project won isprize.trackName; to list a track’s winners, filterwinnersOnlyresults byprize.trackName. Events without track prizes, including Frontier, return submission choices inlabels.trackClassificationisprize_tracks,submission_labelsorambiguous; ambiguous projects expose neither. Search withlabelKeysfrom/filters.labelsor thelabelsfacet. Do not combinelabelKeysandtrackKeys; atrackKeysfilter for an event without track prizes is rejected. - Scores. With
includeDiagnostics: true, the response shows how results were ranked. Compare scores only between results ranked the same way.
Categories
Every project has one main category (primaryKey), sometimes a related second one (secondaryKey), and a confidence of high, medium or low for the main one. Confidence says how clearly the project fits, not how good it is. A new project can have categories: null until it’s been categorized.
GET /categories returns the current map: its version, six areas, and 41 categories with keys, labels and definitions, plus other-emerging (no category fits) and insufficient-information (the public material doesn’t say enough).
filters.categoryKeystakes one to ten category keys and matches any of them. To cover an area, list its category keys.- Filters, facets and
POST /analyzecount main categories only by default. SetincludeSecondaryCategories: trueto include second categories. Those counts can overlap, and the response then setscategoryCountsOverlap: true. - For every category count in one request, call
POST /analyzewithdimensions: ["categories"]andtopK: 43. Category facets also acceptfacetTopK: 43. Other dimensions and facets return at most 20 buckets. POST /comparedoesn’t accept categories.
Technologies
Four routes count the tools recorded in teams’ public code:POST /technologies/counts, /co-usage, /trends and /top. A technology is written as { "category": "frameworks", "name": "Anchor" }. The seven categories are languages, frameworks, chains, protocols, services, tooling and standards. Names match without regard to case, with no aliases or partial matches. Look up recorded names in project details.
Each route accepts an optional cohort. Leave it out to include every project.
hackathonSlugs takes one to 20 slugs and categoryKeys one to ten keys. With winnersOnly: true, honorable mentions are left out unless includeHonorableMentions is also true. includeHonorableMentions needs winnersOnly: true. Unknown fields are rejected. Unknown technologies or hackathons return zero results.
- Counts:
{ "technology": {...}, "cohort": {...} }returns how many projects are tagged with it, overall and per hackathon. - Used together: same body plus optional
topK(1 to 50, default 10). Returns the technologies most often used alongside it. - Trends: same body as counts. Returns usage per hackathon, in date order.
- Top: optional
cohort,technologyCategoryandtopK. Returns the most-used technologies. Leave outtechnologyCategoryto rank across all seven.
projectsWithRepositoryTags across cohorts before reading a change in share as a change in adoption. A missing tag doesn’t prove a project didn’t use something.
Research library
- Search.
POST /search/archivesreturns snippets of up to 240 characters and pages up to offset 50.totalFoundsupports paging and isn’t an exact count.totalMatchedcounts text matches only.searchTiershows which search method found the results.maxDocsPerSource: 0removes the per-source cap. - Reading.
GET /archives/:documentIdreturns a document a page at a time.maxCharsdefaults to 8,000 and can be 200 to 20,000. - Excerpts. Some licensed sources are available only as excerpts. Their responses have
isExcerpt: true(andrestricted: true), at most 1,000 characters in total, anexcerptNote, and aurlto the full piece on the publisher’s site. - Withdrawn documents return
404 NOT_FOUND.
Builder tools
GET /resources returns sponsors, resource topics and RPC providers from Colosseum’s hackathon resources hub.
topic filters topics only, not sponsors or RPC providers. Arrays excluded by kind come back empty. Unknown tracks return 404, and an ambiguous topic returns 400.
The V2 response includes eventDates for the requested hackathon: hackathonSlug, startDate, submissionDeadline and winnerAnnouncementDate, which is null until Colosseum records it. Hackathons without a resources page return 404. Confirm consequential dates on the event page.
Data is cached for 10 minutes. After that, the cached copy is returned with source.stale: true while it refreshes. Copies older than 24 hours are never returned. When pointing people to the tools, link Colosseum’s resources hub rather than source.url.
Errors: 404 NOT_FOUND for an unknown hackathon, 400 INVALID_QUERY for a bad parameter, and 503 resources_unavailable if the hub can’t be reached and there’s no cached copy.
Program FAQs
GET /faqs?program=accelerator&q=funding lists or searches Colosseum’s official FAQs.
programis optional:hackathon,eternal,acceleratororstamp.qis optional, 2 to 200 characters. It’s a keyword search that ranks matches in the question above matches in the answer. No matches returns an emptyfaqslist.GET /faqs/:program/:idreturns one FAQ. Unknown IDs return 404.
eventDates for the most recently started hackathon, or null when the response has no hackathon FAQ (for example program=accelerator). Each FAQ includes sourceUrl, the live program page it comes from. contentRevision identifies the text, not when it was published. For deadlines and eligibility, the live page is the final word.
Sharing questions and answers
POST /session-shares saves a conversation when the user opted in to sharing for this sign-in. The sign-in tool’s share command calls it for you and removes likely secrets first.
- Requirements: a sign-in with sharing turned on and the
telemetry:writescope. Without both, the request gets403 INSUFFICIENT_SCOPE.GET /statusshowssessionSharingEnabled. - Body:
sessionId(a UUID) andmessages: 2 to 100 objects withrole(userorassistant) andcontent(1 to 20,000 characters), with at least one of each role. Themessagesarray can be up to 100,000 characters in total. - New conversation:
201with{ saved: true, expiresAt }. Conversations are kept for 12 months. - Same
sessionIdagain:200. Adding messages to the end returnssaved: true. Otherwise it returnssaved: falsewith areason:unchanged,not_newer(the upload is shorter than the saved copy, or its earlier messages differ) orexpired. Updates don’t change the expiry date.
Feedback and source suggestions
POST /feedback sends a note to the Colosseum team. context can be up to 10,000 characters once serialized. POST /source-suggestions suggests a source for the research library; the URL must be public HTTP or HTTPS with no embedded credentials.
Scopes
The sign-in tool requestsevidence:read, self-data:read and telemetry:write. telemetry:write shares nothing unless the user also opts in when approving. GET /status returns granted scopes as a space-separated string.
copilot:retrieval, copilot:telemetry and copilot:self-data are older names for the same three scopes. profile:read can be requested but isn’t included by default. projects:updates:write and submissions:write are reserved; no endpoint writes to your project.
Limits
Limits apply per account, across all of its tokens.
Over a limit, you get
429 with a Retry-After header in seconds. Going over the two-at-once limit returns Retry-After: 1.
If Retry-After is longer than 60 seconds, do not wait or retry; tell the user the limit is reached for now and continue with search and filters.
Errors
Error responses haveerror (a message), code and retryable. Server errors can also include requestId; send it with any support request, but never a token.
Other codes can appear; follow the status and
retryable flag. A search with no results is a successful response, not an error.