Valimail Portfolios API

The Portfolios API from Valimail — 1 operation(s) for portfolios.

Operations 5

GET /accounts/{slug}/portfolios Returns domains connected to portfolios of all linked accounts
GET /accounts/{slug}/v2/portfolios Returns portfolios linked to the account slug provided.
POST /accounts/{slug}/v2/portfolios Creates a new portfolio linked to the account slug provided.
GET /accounts/{slug}/v2/portfolios/{portfolio-slug} Returns portfolio data by account slug and portfolio slug.
PUT /accounts/{slug}/v2/portfolios/{portfolio-slug} Updates portfolio data by account slug and portfolio slug.

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/valimail-portfolios-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 email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

valimail-portfolios-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Valimail Portfolios API
  version: 1.0.0
  description: 'Operations tagged Portfolios across 2 of this provider''s published API definitions: valimail-account-openapi-original.yml, valimail-partner-openapi-original.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.valimail.com
  description: API services
- url: https://api.valimail-staging.com
  description: Stage test server
- url: http://localhost:7001
  description: Local development server
security:
- bearerAuth: []
tags:
- name: Portfolios
paths:
  /accounts/{slug}/portfolios:
    get:
      summary: Returns domains connected to portfolios of all linked accounts
      tags:
      - Portfolios
      parameters:
      - name: slug
        in: path
        description: Account slug to be queried.
        required: true
        schema:
          type: string
        example: valimail
      responses:
        '200':
          description: Ok - A list of all account's portfolios that have domains connected to it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioSets'
        '400':
          description: Bad Request - Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
        '401':
          description: Unauthorized - Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity - Failed to normalize or parse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Over Rate - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error - Service, database, or unclassified error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    servers:
    - url: https://api.valimail.com
      description: API services
    - url: https://api.valimail-staging.com
      description: Stage test server
    - url: http://localhost:7001
      description: Local development server
  /accounts/{slug}/v2/portfolios:
    get:
      summary: Returns portfolios linked to the account slug provided.
      tags:
      - Portfolios
      parameters:
      - name: slug
        in: path
        description: Account slug to be queried.
        required: true
        schema:
          type: string
        example: valimail
      responses:
        '200':
          description: OK - List of the Portfolios linked to the account slug are provided
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Portfolio'
        '400':
          description: Bad Request - Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
        '401':
          description: Unauthorized - Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity - Failed to normalize or parse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Over Rate - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error - Service, database, or unclassified error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      summary: Creates a new portfolio linked to the account slug provided.
      tags:
      - Portfolios
      parameters:
      - name: slug
        in: path
        description: Account slug to create a portfolio.
        required: true
        schema:
          type: string
        example: valimail
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioCreate'
      responses:
        '200':
          description: Ok - New portfolio created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Portfolio'
        '400':
          description: Bad Request - Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
        '401':
          description: Unauthorized - Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity - Failed to normalize or parse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Over Rate - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error - Service, database, or unclassified error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    servers:
    - url: https://api.valimail.com
      description: API services
    - url: https://api.valimail-staging.com
      description: Stage test server
    - url: http://localhost:7001
      description: Local development server
  /accounts/{slug}/v2/portfolios/{portfolio-slug}:
    get:
      summary: Returns portfolio data by account slug and portfolio slug.
      tags:
      - Portfolios
      parameters:
      - name: slug
        in: path
        description: Account slug to be queried.
        required: true
        schema:
          type: string
        example: valimail
      - name: portfolio-slug
        in: path
        description: Portfolio slug to be queried.
        required: true
        schema:
          type: string
        example: marketing-domains
      responses:
        '200':
          description: Ok - Single Portfolio is provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Portfolio'
        '400':
          description: Bad Request - Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
        '401':
          description: Unauthorized - Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Account or portfolio not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity - Failed to normalize or parse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Over Rate - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error - Service, database, or unclassified error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    put:
      summary: Updates portfolio data by account slug and portfolio slug.
      tags:
      - Portfolios
      parameters:
      - name: slug
        in: path
        description: Account slug to update a portfolio.
        required: true
        schema:
          type: string
        example: valimail
      - name: portfolio-slug
        in: path
        description: Portfolio slug to be updated.
        required: true
        schema:
          type: string
        example: marketing-domains
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioCreate'
      responses:
        '200':
          description: Ok - Portfolio updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Portfolio'
        '400':
          description: Bad Request - Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
        '401':
          description: Unauthorized - Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Authorization failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found - Account or portfolio not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity - Failed to normalize or parse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Over Rate - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error - Service, database, or unclassified error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    servers:
    - url: https://api.valimail.com
      description: API services
    - url: https://api.valimail-staging.com
      description: Stage test server
    - url: http://localhost:7001
      description: Local development server
components:
  schemas:
    PortfolioCreate:
      type: object
      properties:
        name:
          description: Name of the portfolio.
          type: string
        description:
          description: Description of the portfolio.
          type: string
        dynamic:
          description: When true, domain membership is computed from the criteria fields below instead of the explicit domain lists.
          type: boolean
        enforcement-status-criteria:
          description: List of enforcement statuses used to dynamically select domains for the portfolio.
          type: array
          items:
            type: string
        sending-status-criteria:
          description: List of sending statuses used to dynamically select domains for the portfolio.
          type: array
          items:
            type: string
        dmarc-policy-criteria:
          description: List of DMARC policies used to dynamically select domains for the portfolio.
          type: array
          items:
            type: string
        org-domain-names:
          description: Organizational domain names to include in the portfolio.
          type: array
          items:
            type: string
        domain-names:
          description: Domain names to include in the portfolio.
          type: array
          items:
            type: string
    Portfolio:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        slug:
          type: string
        dynamic:
          type: boolean
          description: When true, domain membership is computed from the criteria fields below instead of the explicit domain lists.
        org-domain-names:
          type: array
          items:
            type: string
        domain-names:
          type: array
          items:
            type: string
        enforcement-status-criteria:
          type: array
          items:
            type: string
        sending-status-criteria:
          type: array
          items:
            type: string
        dmarc-policy-criteria:
          type: array
          items:
            type: string
      example:
        name: Marketing Domains
        description: Domains managed by the marketing team
        slug: marketing-domains
        dynamic: true
        org-domain-names:
        - dmarceverywhere.com
        domain-names:
        - heytest.com
        enforcement-status-criteria:
        - enforced
        sending-status-criteria:
        - sending
        dmarc-policy-criteria:
        - reject
    ValidationResponse:
      type: object
      properties:
        params:
          type: string
        detail:
          type: array
          items:
            $ref: '#/components/schemas/ValidationDetail'
    ValidationDetail:
      type: object
      properties:
        field:
          type: string
        value:
          type: string
        message:
          type: string
    ErrorResponse:
      type: object
      properties:
        request:
          type: string
        message:
          type: string
        type:
          type: string
        request-id:
          type: string
        call:
          type: string
    PortfolioSets:
      type: array
      items:
        properties:
          portfolio-name:
            type: string
          account-name:
            type: string
          domain-name:
            type: string
          org-domain-name:
            type: string
      example:
      - portfolio-name: Valimail
        account-name: Valimail
        domain-name: dmarceverywhere.com
        org-domain-name: dmarceverywhere.com
      - portfolio-name: Valimail
        account-name: Valimail
        domain-name: heytest.com
        org-domain-name: heytest.com
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
x-refined-from:
- valimail-account-openapi-original.yml
- valimail-partner-openapi-original.yml