Valimail Portfolios API
The Portfolios API from Valimail — 1 operation(s) for portfolios.
The Portfolios API from Valimail — 1 operation(s) for portfolios.
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/valimail-portfolios-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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