samva-dev Extensions API

Code that receives mailbox events and acts through the mailbox API

Operations 5

GET /v1/extensions List extensions #
POST /v1/extensions Publish an extension version #
GET /v1/extensions/{id} Get an extension #
GET /v1/extensions/{id}/versions List an extension's versions #
GET /v1/extensions/{id}/versions/{versionId} Get an extension version #

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/samva-dev:samva-dev-extensions-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

samva-dev-extensions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Samva Extensions API
  version: 1.0.0
  description: Samva is the email API for your app. Send transactional email in one typed call. Delivery events and customer replies come back as signed webhooks, and replies thread to the email they answer.
servers:
- url: https://api.samva.dev
security: []
tags:
- name: Extensions
  description: Code that receives mailbox events and acts through the mailbox API
paths:
  /v1/extensions:
    get:
      tags:
      - Extensions
      operationId: extensions.list
      parameters:
      - name: limit
        in: query
        schema:
          anyOf:
          - type: integer
            maximum: 100
            exclusiveMinimum: 0
            description: Items per page, at most 100.
          - type: 'null'
        required: false
      - name: cursor
        in: query
        schema:
          anyOf:
          - $ref: '#/components/schemas/Cursor'
          - type: 'null'
        required: false
      - name: after
        in: query
        schema:
          anyOf:
          - type: string
          - type: 'null'
        required: false
      - name: before
        in: query
        schema:
          anyOf:
          - type: string
          - type: 'null'
        required: false
      security:
      - apiKey: []
      responses:
        '200':
          description: ExtensionPage
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExtensionPage'
        '401':
          description: UnauthorizedError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: ForbiddenError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: ResourceNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundError'
        '422':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: InternalError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '504':
          description: GatewayTimeoutError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
      description: Returns the organization's published extensions with their latest version, newest first, filterable by creation time (`after`, `before`). Pass `nextCursor` back as `cursor` for the next page; it is null on the last page.
      summary: List extensions
      x-samva-scope: mailboxes:read
    post:
      tags:
      - Extensions
      operationId: extensions.publish
      parameters: []
      security:
      - apiKey: []
      responses:
        '201':
          description: PublishExtensionVersionResponse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublishExtensionVersionResponse'
        '401':
          description: UnauthorizedError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: ForbiddenError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: ResourceNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundError'
        '409':
          description: ConflictError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictError'
        '422':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: InternalError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '504':
          description: GatewayTimeoutError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
      description: Publishes one version from its manifest and returns it with status 201, creating the extension named by the manifest on its first version. A hosted manifest carries its bundle. Publishing a version again with the same manifest and bundle returns it; a different one conflicts, so bump the manifest's version. Only a person can publish, not an API key.
      summary: Publish an extension version
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublishExtensionVersionPayload'
        required: true
      x-samva-scope: mailboxes:manage
  /v1/extensions/{id}:
    get:
      tags:
      - Extensions
      operationId: extensions.get
      parameters:
      - name: id
        in: path
        schema:
          type: string
          minLength: 1
          maxLength: 64
          description: The extension's id (`ext_…`) or its name.
          x-samva-string-checks:
          - id: effect/schema/isMaxLength
            payload:
              maxLength: 64
        required: true
      security:
      - apiKey: []
      responses:
        '200':
          description: Extension
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Extension'
        '401':
          description: UnauthorizedError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: ForbiddenError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: ResourceNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundError'
        '422':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: InternalError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '504':
          description: GatewayTimeoutError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
      description: Returns one extension by its id or name. Its versions are `GET /v1/extensions/{id}/versions`.
      summary: Get an extension
      x-samva-scope: mailboxes:read
  /v1/extensions/{id}/versions:
    get:
      tags:
      - Extensions
      operationId: extensions.listVersions
      parameters:
      - name: id
        in: path
        schema:
          type: string
          minLength: 1
          maxLength: 64
          description: The extension's id (`ext_…`) or its name.
          x-samva-string-checks:
          - id: effect/schema/isMaxLength
            payload:
              maxLength: 64
        required: true
      - name: limit
        in: query
        schema:
          anyOf:
          - type: integer
            maximum: 100
            exclusiveMinimum: 0
            description: Items per page, at most 100.
          - type: 'null'
        required: false
      - name: cursor
        in: query
        schema:
          anyOf:
          - $ref: '#/components/schemas/Cursor'
          - type: 'null'
        required: false
      security:
      - apiKey: []
      responses:
        '200':
          description: ExtensionVersionPage
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExtensionVersionPage'
        '401':
          description: UnauthorizedError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: ForbiddenError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: ResourceNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundError'
        '422':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: InternalError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '504':
          description: GatewayTimeoutError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
      description: Returns summaries of an extension's published versions, newest first. Pass `nextCursor` back as `cursor` for the next page; it is null on the last page. Read a version's manifest with `GET /v1/extensions/{id}/versions/{versionId}`.
      summary: List an extension's versions
      x-samva-scope: mailboxes:read
  /v1/extensions/{id}/versions/{versionId}:
    get:
      tags:
      - Extensions
      operationId: extensions.getVersion
      parameters:
      - name: id
        in: path
        schema:
          type: string
          minLength: 1
          maxLength: 64
          description: The extension's id (`ext_…`) or its name.
          x-samva-string-checks:
          - id: effect/schema/isMaxLength
            payload:
              maxLength: 64
        required: true
      - name: versionId
        in: path
        schema:
          type: string
          minLength: 1
          maxLength: 85
          description: The version's id (`extver_…`) or its version string, such as `1.0.0`.
          x-samva-string-checks:
          - id: effect/schema/isMaxLength
            payload:
              maxLength: 85
        required: true
      security:
      - apiKey: []
      responses:
        '200':
          description: ExtensionVersion
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExtensionVersion'
        '401':
          description: UnauthorizedError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: ForbiddenError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: ResourceNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceNotFoundError'
        '422':
          description: ValidationError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: InternalError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalError'
        '504':
          description: GatewayTimeoutError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
      description: Returns one version, by its id or version string, with the manifest it was published with.
      summary: Get an extension version
      x-samva-scope: mailboxes:read
components:
  schemas:
    ExtensionVersionRef:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ExtensionVersionId'
        version:
          type: string
      required:
      - id
      - version
      additionalProperties: false
    Extension:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ExtensionId'
        name:
          type: string
        displayName:
          type: string
        description:
          anyOf:
          - type: string
          - type: 'null'
        runtime:
          type: string
          enum:
          - hosted
          - webhook
        latestVersion:
          $ref: '#/components/schemas/ExtensionVersionRef'
        createdAt:
          type: string
        updatedAt:
          type: string
      required:
      - id
      - name
      - displayName
      - description
      - runtime
      - latestVersion
      - createdAt
      - updatedAt
      additionalProperties: false
    ExtensionId:
      type: string
      pattern: ^ext_[0-9a-hjkmnp-tv-z]{16,24}$
      x-samva-brand: ExtensionId
    UnauthorizedError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - UnauthorizedError
        message:
          type: string
      required:
      - _tag
      - message
      additionalProperties: false
      x-category:
      - auth
      x-retryable: false
    ExtensionBundle:
      type: object
      properties:
        sha256:
          type: string
        sizeBytes:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
      required:
      - sha256
      - sizeBytes
      additionalProperties: false
    ExtensionVersionSummary:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ExtensionVersionId'
        version:
          type: string
        runtime:
          type: string
          enum:
          - hosted
          - webhook
        bundle:
          anyOf:
          - $ref: '#/components/schemas/ExtensionBundle'
          - type: 'null'
        publishedAt:
          type: string
      required:
      - id
      - version
      - runtime
      - bundle
      - publishedAt
      additionalProperties: false
    PublishExtensionVersionResponse:
      type: object
      properties:
        extension:
          $ref: '#/components/schemas/Extension'
        version:
          $ref: '#/components/schemas/ExtensionVersion'
      required:
      - extension
      - version
      additionalProperties: false
    ExtensionVersionPage:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/ExtensionVersionSummary'
        nextCursor:
          anyOf:
          - type: string
          - type: 'null'
      required:
      - items
      - nextCursor
      additionalProperties: false
    InternalError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - InternalError
        message:
          type: string
      required:
      - _tag
      - message
      additionalProperties: false
      x-category:
      - transient
      x-retryable: true
    ExtensionVersionId:
      type: string
      pattern: ^extver_[0-9a-hjkmnp-tv-z]{16,24}$
      x-samva-brand: ExtensionVersionId
    Cursor:
      type: string
    GatewayTimeoutError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - GatewayTimeoutError
        message:
          type: string
        retryAfterSeconds:
          type: number
      required:
      - _tag
      - message
      - retryAfterSeconds
      additionalProperties: false
      x-category:
      - transient
      x-retryable: true
    ExtensionPage:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Extension'
        nextCursor:
          anyOf:
          - type: string
          - type: 'null'
      required:
      - items
      - nextCursor
      additionalProperties: false
    ValidationError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - ValidationError
        message:
          type: string
        fields:
          anyOf:
          - type: object
            additionalProperties:
              type: array
              items:
                type: string
          - type: 'null'
      required:
      - _tag
      - message
      additionalProperties: false
      x-category:
      - validation
      x-retryable: false
    ConflictError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - ConflictError
        message:
          type: string
        resource:
          type: string
        id:
          anyOf:
          - type: string
          - type: 'null'
      required:
      - _tag
      - message
      - resource
      additionalProperties: false
      x-category:
      - conflict
      x-retryable: false
    ExtensionVersion:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ExtensionVersionId'
        version:
          type: string
        runtime:
          type: string
          enum:
          - hosted
          - webhook
        bundle:
          anyOf:
          - $ref: '#/components/schemas/ExtensionBundle'
          - type: 'null'
        publishedAt:
          type: string
        manifest:
          type: object
          properties:
            name:
              type: string
              pattern: ^[a-z][a-z0-9-]{1,62}[a-z0-9]$
            displayName:
              type: string
              minLength: 1
              maxLength: 80
              x-samva-string-checks:
              - id: effect/schema/isMaxLength
                payload:
                  maxLength: 80
            description:
              anyOf:
              - type: string
                maxLength: 500
                x-samva-string-checks:
                - id: effect/schema/isMaxLength
                  payload:
                    maxLength: 500
              - type: 'null'
            version:
              type: string
              pattern: ^\d{1,6}\.\d{1,6}\.\d{1,6}(?:-[0-9A-Za-z.-]{1,64})?$
            runtime:
              type: string
              enum:
              - hosted
              - webhook
            events:
              type: array
              items:
                type: string
                enum:
                - mailbox.message.received
                - mailbox.message.sent
                - mailbox.action.pending_approval
                - mailbox.action.resolved
                - mailbox.message.quarantined
                - mailbox.message.released
                - mailbox.message.discarded
              minItems: 1
            permissions:
              type: array
              items:
                type: string
                enum:
                - read
                - update
                - send
                - quarantine.read
          required:
          - name
          - displayName
          - version
          - runtime
          - events
          - permissions
          additionalProperties: false
      required:
      - id
      - version
      - runtime
      - bundle
      - publishedAt
      - manifest
      additionalProperties: false
    ForbiddenError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - ForbiddenError
        message:
          type: string
      required:
      - _tag
      - message
      additionalProperties: false
      x-category:
      - auth
      x-retryable: false
    ResourceNotFoundError:
      type: object
      properties:
        _tag:
          type: string
          enum:
          - ResourceNotFoundError
        resource:
          type: string
        id:
          type: string
        message:
          type: string
      required:
      - _tag
      - resource
      - id
      - message
      additionalProperties: false
      x-category:
      - notFound
      x-retryable: false
    PublishExtensionVersionPayload:
      type: object
      properties:
        manifest:
          type: object
          properties:
            name:
              type: string
              pattern: ^[a-z][a-z0-9-]{1,62}[a-z0-9]$
            displayName:
              type: string
              minLength: 1
              maxLength: 80
              x-samva-string-checks:
              - id: effect/schema/isMaxLength
                payload:
                  maxLength: 80
            description:
              anyOf:
              - type: string
                maxLength: 500
                x-samva-string-checks:
                - id: effect/schema/isMaxLength
                  payload:
                    maxLength: 500
              - type: 'null'
            version:
              type: string
              pattern: ^\d{1,6}\.\d{1,6}\.\d{1,6}(?:-[0-9A-Za-z.-]{1,64})?$
            runtime:
              type: string
              enum:
              - hosted
              - webhook
            events:
              type: array
              items:
                type: string
                enum:
                - mailbox.message.received
                - mailbox.message.sent
                - mailbox.action.pending_approval
                - mailbox.action.resolved
                - mailbox.message.quarantined
                - mailbox.message.released
                - mailbox.message.discarded
              minItems: 1
            permissions:
              type: array
              items:
                type: string
                enum:
                - read
                - update
                - send
                - quarantine.read
          required:
          - name
          - displayName
          - version
          - runtime
          - events
          - permissions
          additionalProperties: false
        bundle:
          anyOf:
          - type: string
          - type: 'null'
      required:
      - manifest
      additionalProperties: false
  securitySchemes:
    apiKey:
      type: apiKey
      name: x-api-key
      in: header