Primitive Discovery API

Unauthenticated entry point that lists the API base URL, how to obtain credentials, and the operations callable without a token.

Operations 3

GET /discovery List the unauthenticated API endpoints #
GET /ask Ask about Primitive — NLWeb query (no authentication) #
POST /ask Ask about Primitive — NLWeb query (no authentication) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/primitive-discovery-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

primitive-discovery-api-openapi.yml Raw ↑
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