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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/loops-so-themes-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
openapi: 3.2.0
info:
title: Loops OpenAPI Spec API key Themes API
description: This is the OpenAPI Spec for the [Loops API](https://loops.so/docs/api).
version: 1.8.0
servers:
- url: https://app.loops.so/api/v1
tags:
- name: Themes
description: View email themes
paths:
/themes/{themeId}:
parameters:
- name: themeId
in: path
required: true
description: The ID of the theme.
schema:
type: string
get:
tags:
- Themes
summary: Get a theme
description: Retrieve a single theme by ID.
responses:
'200':
description: Successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ThemeResponse'
'400':
description: Invalid `themeId`.
content:
application/json:
schema:
$ref: '#/components/schemas/ThemeFailureResponse'
'401':
description: Invalid API key or content API not enabled for this team.
'404':
description: Theme not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ThemeFailureResponse'
'405':
description: Wrong HTTP request method.
security:
- apiKey: []
/themes:
get:
tags:
- Themes
summary: List themes
description: Retrieve a paginated list of email themes, most recently created first.
parameters:
- name: perPage
in: query
required: false
description: How many results to return in each request. Must be between 10 and 50. Default is 20.
schema:
type: string
- name: cursor
in: query
required: false
description: A cursor to return a specific page of results. Cursors can be found from the `pagination.nextCursor` value in each response.
schema:
type: string
responses:
'200':
description: Successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ListThemesResponse'
'400':
description: Invalid `perPage` value.
content:
application/json:
schema:
$ref: '#/components/schemas/ThemeFailureResponse'
'401':
description: Invalid API key or content API not enabled for this team.
'405':
description: Wrong HTTP request method.
security:
- apiKey: []
components:
schemas:
ThemeFailureResponse:
type: object
properties:
success:
type: boolean
examples:
- false
message:
type: string
required:
- success
- message
ListThemesResponse:
type: object
properties:
success:
type: boolean
examples:
- true
pagination:
type: object
properties:
totalResults:
type: number
returnedResults:
type: number
perPage:
type: number
totalPages:
type: number
nextCursor:
type:
- string
- 'null'
nextPage:
type:
- string
- 'null'
data:
type: array
items:
$ref: '#/components/schemas/Theme'
required:
- success
- pagination
- data
Theme:
type: object
properties:
themeId:
type: string
name:
type: string
styles:
$ref: '#/components/schemas/ThemeStyles'
isDefault:
type: boolean
description: Whether this theme is the team's default.
createdAt:
type: string
description: ISO 8601 timestamp.
updatedAt:
type: string
description: ISO 8601 timestamp.
required:
- themeId
- name
- styles
- isDefault
- createdAt
- updatedAt
ThemeResponse:
type: object
properties:
success:
type: boolean
examples:
- true
themeId:
type: string
name:
type: string
styles:
$ref: '#/components/schemas/ThemeStyles'
isDefault:
type: boolean
description: Whether this theme is the team's default.
createdAt:
type: string
description: ISO 8601 timestamp.
updatedAt:
type: string
description: ISO 8601 timestamp.
required:
- success
- themeId
- name
- styles
- isDefault
- createdAt
- updatedAt
ThemeStyles:
type: object
description: Flat map of style attributes, matching the attribute names accepted by the LMX `<Style />` tag. All attributes are returned with the values stored on the theme.
properties:
backgroundColor:
type: string
backgroundXPadding:
type: number
backgroundYPadding:
type: number
bodyColor:
type: string
bodyXPadding:
type: number
bodyYPadding:
type: number
bodyFontFamily:
type: string
bodyFontCategory:
type: string
borderColor:
type: string
borderWidth:
type: number
borderRadius:
type: number
buttonBodyColor:
type: string
buttonBodyXPadding:
type: number
buttonBodyYPadding:
type: number
buttonBorderColor:
type: string
buttonBorderWidth:
type: number
buttonBorderRadius:
type: number
buttonTextColor:
type: string
buttonTextFormat:
type: number
buttonTextFontSize:
type: number
dividerColor:
type: string
dividerBorderWidth:
type: number
textBaseColor:
type: string
textBaseFontSize:
type: number
textBaseLineHeight:
type: number
textBaseLetterSpacing:
type: number
textLinkColor:
type: string
heading1Color:
type: string
heading1FontSize:
type: number
heading1LineHeight:
type: number
heading1LetterSpacing:
type: number
heading2Color:
type: string
heading2FontSize:
type: number
heading2LineHeight:
type: number
heading2LetterSpacing:
type: number
heading3Color:
type: string
heading3FontSize:
type: number
heading3LineHeight:
type: number
heading3LetterSpacing:
type: number
securitySchemes:
apiKey:
type: http
scheme: bearer