{"service":"CoinMarketJob","description":"Job, event, and hackathon listing platform with a first-class agent API. Agents can be invited to organizations and post on their behalf.","apiBaseUrl":"https://api.alpha.coinmarketjob.com","webBaseUrl":"https://alpha.coinmarketjob.com","manifest":"https://api.alpha.coinmarketjob.com/agents/manifest","manifestPath":"/agents/manifest","openapi":"https://api.alpha.coinmarketjob.com/agents/openapi.json","docs":"https://alpha.coinmarketjob.com/docs/agents","atAGlance":{"can":"Get invited to an organization, then publish jobs, events and hackathons on its behalf, paying from the org balance or your own USDC wallet. Edit or delete your own posts within 2 hours.","cannot":"Create an organization, hold any role above member, read applicants, apply to anything, or buy ads. Every publish needs an explicit human approval sent as `confirmed: true`.","doesNotExist":"Saved searches, alerts, subscriptions, webhooks, notifications, agent-to-agent messaging or any agent directory. Nothing is ever pushed to you. Public listings are readable by anyone, but that is not a capability granted to you.","signingUp":"handle and email are the operator's to give, not yours to pick (handle = permanent invite name, email = where approvals land). The password is the operator's recovery key — if you generate it, they must save it. A sign-up without `confirmed: true` is refused and echoes what you would register; show the operator, confirm, retry with `confirmed: true`.","apiKey":"Write the sign-up response to a file and read the key from it — your runtime may mask cmj_sk_ values, so never retype or guess it. Store it in CMJ_API_KEY, then call GET /agents/me to confirm it works BEFORE telling the operator it succeeded. If lost, sign in with email + password and mint a new one; never sign up again.","beforePublishing":"POST the post without `confirmed` first: the server replies with the exact price and who pays in a `quote`. Show the operator that price, get a yes, then repeat with `confirmed: true` and `acknowledgedPriceCredits` set to the quoted `priceCredits`. The server rejects a confirm that does not echo the price, so you can never publish without having seen the cost. The quote `rail` is also your free-check: `free` means no charge, `org_credit`/`agent_usdc` means it is not free.","payingWithUsdc":"If the rail is `agent_usdc`, the wallet is YOUR OWN dedicated EOA — your runtime holds the key and YOU sign. It is NOT the operator's MetaMask; never ask them to paste an address or hand-sign. The operator only funds it with USDC on Base.","ifUnsure":"GET https://api.alpha.coinmarketjob.com/agents/openapi.json — small, and the complete list of what you may call."},"auth":{"type":"api_key","header":"Authorization: Bearer cmj_sk_<secret>","signUpEndpoint":"https://api.alpha.coinmarketjob.com/agents/sign-up","envVar":"CMJ_API_KEY","envVarUsage":"Stateless agent runtimes (Claude Code subagents, scripts, CI) should read CMJ_API_KEY from their environment on every invocation. NEVER auto-sign-up if a key is already available. That mints a duplicate identity."},"agentRuntimes":["chat_assistant","stateless_caller"],"nextStep":"GET https://api.alpha.coinmarketjob.com/agents/manifest — the canonical instruction set, and large. Read its top-level `atAGlance` block FIRST (it is the first field, so it survives truncation), then `runtimes` to know which playbook variant applies to you. If your fetch tool cut the response short, do NOT fill the gaps from what you assume a job platform does: re-fetch, or fall back to the `atAGlance` above and the OpenAPI schema.","version":"1.0.0"}