Primitive Discovery API
Unauthenticated entry point that lists the API base URL, how to obtain credentials, and the operations callable without a token.
Unauthenticated entry point that lists the API base URL, how to obtain credentials, and the operations callable without a token.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/primitive-discovery-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Primitive Discovery API
version: 1.0.0
description: Primitive is email infrastructure for AI agents.
contact:
name: Primitive
url: https://primitive.dev
license:
name: Proprietary
url: https://primitive.dev/terms
x-stability-level: stable
x-deprecation-policy: 'Breaking changes are announced at least 6 months in advance. Deprecated fields carry x-deprecated: true. The current stable version is v1.'
servers:
- url: https://api.primitive.dev/v1
description: Canonical API host (PRIMITIVE_API_BASE_URL). Carries every public API operation.
tags:
- name: Discovery
description: Unauthenticated entry point that lists the API base URL, how to obtain credentials, and the operations callable without a token.
paths:
/discovery:
get:
operationId: getDiscovery
summary: List the unauthenticated API endpoints
description: 'Public, no-auth entry point for arriving agents. Returns the API base URL, the authentication lifecycle (register/claim/revoke), and the list of operations callable without credentials — the agent/CLI signup + login flows and the no-account `POST /send-mail/demo`. Fetch this first to discover how to obtain credentials, then call the authenticated operations with `Authorization: Bearer prim_`.'
tags:
- Discovery
security: []
responses:
'200':
description: Discovery document listing the unauthenticated endpoints and how to obtain credentials.
content:
application/json:
schema:
type: object
properties:
service:
type: string
description:
type: string
base_url:
type: string
format: uri
documentation:
type: string
format: uri
openapi:
type: string
format: uri
authentication:
type: object
properties:
guide:
type: string
format: uri
register_uri:
type: string
format: uri
claim_uri:
type: string
format: uri
revocation_uri:
type: string
format: uri
required:
- guide
- register_uri
- claim_uri
- revocation_uri
public_endpoints:
type: array
items:
type: object
properties:
method:
type: string
path:
type: string
url:
type: string
format: uri
summary:
type: string
authentication:
type: string
const: none
required:
- method
- path
- url
- summary
- authentication
required:
- service
- base_url
- authentication
- public_endpoints
example:
service: Primitive — email infrastructure for AI agents
description: 'These endpoints are callable without authentication. Use the signup flows to register an agent identity and obtain credentials, or the demo to exercise the API before you have one. Every other endpoint requires `Authorization: Bearer <token>`.'
base_url: https://api.primitive.dev/v1
documentation: https://docs.primitive.dev/docs
openapi: https://www.primitive.dev/openapi.json
authentication:
guide: https://www.primitive.dev/auth.md
register_uri: https://api.primitive.dev/v1/agent/signup/start
claim_uri: https://api.primitive.dev/v1/agent/signup/verify
revocation_uri: https://www.primitive.dev/oauth/revoke
public_endpoints:
- method: POST
path: /agent/signup/start
url: https://api.primitive.dev/v1/agent/signup/start
summary: Start agent account signup
authentication: none
- method: POST
path: /send-mail/demo
url: https://api.primitive.dev/v1/send-mail/demo
summary: Try send-mail without authentication (simulation — no mail is sent)
authentication: none
/ask:
servers:
- url: https://www.primitive.dev
description: Web origin — NLWeb endpoint host (not the v1 API base).
get:
operationId: askGet
summary: Ask about Primitive — NLWeb query (no authentication)
description: 'Microsoft NLWeb natural-language query endpoint. Returns structured JSON describing Primitive. **No credentials required.** Pass the question as `?q=...`; send `Accept: text/event-stream` for an SSE stream.'
tags:
- Discovery
security: []
parameters:
- name: q
in: query
required: false
schema:
type: string
maxLength: 500
description: Natural-language question about Primitive.
responses:
'200':
description: NLWeb result list describing Primitive capabilities.
content:
application/json:
schema:
type: object
properties:
_meta:
type: object
properties:
response_type:
type: string
version:
type: string
query:
type: string
results:
type: array
items:
type: object
properties:
'@context':
type: string
'@type':
type: string
name:
type: string
url:
type: string
description:
type: string
required:
- _meta
- results
post:
operationId: ask
summary: Ask about Primitive — NLWeb query (no authentication)
description: 'Microsoft NLWeb natural-language query endpoint. POST `{ "q": "..." }`. **No credentials required.** Set `prefer.streaming: true` or `Accept: text/event-stream` for an SSE stream.'
tags:
- Discovery
security: []
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
q:
type: string
maxLength: 500
description: Natural-language question about Primitive.
prefer:
type: object
properties:
streaming:
type: boolean
example:
q: What does Primitive cost?
responses:
'200':
description: NLWeb result list describing Primitive capabilities.
content:
application/json:
schema:
type: object
properties:
_meta:
type: object
properties:
response_type:
type: string
version:
type: string
query:
type: string
results:
type: array
items:
type: object
properties:
'@context':
type: string
'@type':
type: string
name:
type: string
url:
type: string
description:
type: string
required:
- _meta
- results
parameters:
- name: Idempotency-Key
in: header
required: false
description: Optional client-supplied idempotency key. Retrying a request with the same key returns the original result instead of performing the action a second time; if omitted the server derives one from the canonical payload hash. Safe to retry network failures without duplicating side effects.
schema:
type: string
minLength: 1
maxLength: 255
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'API key with `prim_` prefix or OAuth access token with `prim_oat_` prefix: `Authorization: Bearer <token>`. Access is governed by the caller''s organization role (`owner`, `admin`, or `member`): API keys always act at `member` level regardless of who created them, and OAuth access tokens act with the authorizing user''s current organization role, resolved per request. Every operation in this spec is available to organization members; billing and organization administration are owner/admin actions performed in the dashboard and are not part of this API.'
DownloadToken:
type: apiKey
in: query
name: token
description: Signed download token provided in webhook payloads