Tinvio Catalog API
Search and manage the product and service catalog.
Search and manage the product and service catalog.
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/tinvio-com:tinvio-com-catalog-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: Tinvio Com Catalog API
version: '1.0'
contact:
email: build.with@jaz.ai
name: API Support
url: https://jaz.ai
description: 'Operations tagged Catalog across 2 of this provider''s published API definitions: tinvio-com-openapi-original.yaml, tinvio-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.getjaz.com
tags:
- description: Search and manage the product and service catalog.
name: Catalog
paths:
/api/v1/catalogs:
get:
description: List the organization's catalogs, paginated.
operationId: list-catalogs
parameters:
- description: Maximum number of results per page (max 1000).
in: query
name: limit
schema:
type: integer
default: 100
- description: Zero-indexed row offset into the result set.
in: query
name: offset
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- ApiKeyAuth: []
summary: List Catalogs
tags:
- Catalog
post:
description: Create a catalog.
operationId: create-catalog
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- ApiKeyAuth: []
summary: Create Catalog
tags:
- Catalog
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpsertCatalogClientRequest'
description: The catalog to create.
required: true
servers:
- url: https://api.getjaz.com
/api/v1/catalogs/search:
post:
description: Search catalogs with filters, sort, and pagination.
operationId: search-catalog
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- ApiKeyAuth: []
summary: Search Catalog
tags:
- Catalog
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SearchCatalogRequest'
description: Search filters, sort, and pagination.
required: true
servers:
- url: https://api.getjaz.com
/api/v1/catalogs/{resourceId}:
delete:
description: Delete the catalog.
operationId: delete-catalog
parameters:
- description: Resource ID of the catalog.
in: path
name: resourceId
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- ApiKeyAuth: []
summary: Delete Catalog
tags:
- Catalog
get:
description: Get a single catalog by its resource ID.
operationId: get-catalog
parameters:
- description: Resource ID of the catalog.
in: path
name: resourceId
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- ApiKeyAuth: []
summary: Get Catalog
tags:
- Catalog
put:
description: Update an existing catalog.
operationId: update-catalog
parameters:
- description: Resource ID of the catalog.
in: path
name: resourceId
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- ApiKeyAuth: []
summary: Update Catalog
tags:
- Catalog
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpsertCatalogClientRequest'
description: The catalog fields to update.
required: true
servers:
- url: https://api.getjaz.com
components:
schemas:
ClassifierConfigRequest:
properties:
printable:
description: When true, the classifier appears on printed and PDF documents.
type: boolean
resourceId:
description: Resource ID of the classifier.
type: string
selectedClasses:
description: Classes selected within the classifier.
items:
$ref: '#/components/schemas/SelectedClassRequest'
type: array
type:
description: Transaction type the classifier applies to.
enum:
- bill
- invoice
type: string
required:
- printable
- resourceId
- selectedClasses
- type
type: object
ErrorResponse:
properties:
error:
allOf:
- $ref: '#/components/schemas/ErrorResponseData'
description: Error details.
type: object
DateExpression:
properties:
between:
description: Match dates between these two dates (exactly two, in YYYY-MM-DD format).
items:
type: string
type: array
eq:
description: Match dates equal to this, in YYYY-MM-DD format.
type: string
gt:
description: Match dates after this, in YYYY-MM-DD format.
type: string
gte:
description: Match dates on or after this, in YYYY-MM-DD format.
type: string
isNotNull:
description: Match records where the date is set. Pass the placeholder date "0001-01-01".
example: '0001-01-01'
type: string
isNull:
description: Match records where the date is not set. Pass the placeholder date "0001-01-01".
example: '0001-01-01'
type: string
lt:
description: Match dates before this, in YYYY-MM-DD format.
type: string
lte:
description: Match dates on or before this, in YYYY-MM-DD format.
type: string
notBetween:
description: Match dates outside these two dates (exactly two, in YYYY-MM-DD format).
items:
type: string
type: array
required:
- between
type: object
BaseResponse:
properties:
data:
description: The response object.
type: object
SelectedClassRequest:
properties:
className:
description: Name of the selected class.
type: string
entityResourceId:
description: 'Resource ID of the selected record, when the classifier draws its options from
customers, suppliers, contacts, employees, or users. Send this instead of resourceId.'
type: string
resourceId:
description: Resource ID of the selected class. Required when the classifier lists its own classes.
type: string
required:
- className
type: object
UpsertCatalogClientRequest:
properties:
catalogName:
description: Display name of the catalog.
type: string
contactGroupResourceIds:
description: UUID of contact group.
items:
type: string
maxItems: 100
type: array
description:
description: Catalog item description.
type: string
items:
description: Catalog items.
items:
$ref: '#/components/schemas/UpsertCatalogItemClientRequest'
type: array
status:
default: INACTIVE
description: Catalog status.
enum:
- ACTIVE
- INACTIVE
type: string
required:
- catalogName
- items
type: object
StringExpression:
properties:
contains:
description: Match values containing this substring.
type: string
endWith:
description: Match values ending with this term (case sensitive).
type: string
eq:
description: Match values equal to this.
type: string
in:
description: Match values equal to any of these.
items:
type: string
maxItems: 100
type: array
isBlank:
description: Match records where the field is null or empty ("true") or neither ("false").
type: string
isNotBlank:
description: Match records where the field is neither null nor empty ("true").
type: string
isNull:
description: Match records where the field is null ("true") or not null ("false").
type: string
likeIn:
description: Match values containing any of these substrings.
items:
type: string
maxItems: 100
type: array
neq:
description: Match values not equal to this.
type: string
notContains:
description: Match values not containing this substring.
type: string
notEndWith:
description: Match values not ending with this term (case sensitive).
type: string
notStartWith:
description: Match values not starting with this term (case sensitive).
type: string
reg:
description: Match values containing any of these terms. This is a substring match, not a regular expression, despite the name.
items:
type: string
maxItems: 100
type: array
startWith:
description: Match values starting with this term (case sensitive).
type: string
required:
- in
- likeIn
- reg
type: object
CatalogFilter:
properties:
and:
description: Combine with another filter using AND.
type: object
catalogName:
allOf:
- $ref: '#/components/schemas/StringExpression'
description: Display name of the catalog.
catalogResourceId:
allOf:
- $ref: '#/components/schemas/StringExpression'
description: Filter by catalog resource ID.
contactGroupName:
allOf:
- $ref: '#/components/schemas/StringExpression'
description: Filter by contact group name.
contactGroupResourceId:
allOf:
- $ref: '#/components/schemas/StringExpression'
description: Filter by contact group resource ID.
createdAt:
allOf:
- $ref: '#/components/schemas/DateExpression'
description: Filter by creation time.
description:
allOf:
- $ref: '#/components/schemas/StringExpression'
description: Catalog item description.
or:
description: Combine with another filter using OR.
type: object
status:
allOf:
- $ref: '#/components/schemas/StringExpression'
description: Filter by status.
updatedAt:
allOf:
- $ref: '#/components/schemas/DateExpression'
description: Filter by last update time.
type: object
UpsertCatalogItemClientRequest:
properties:
classifiers:
description: Classifier assignments for the catalog item.
items:
$ref: '#/components/schemas/ClassifierConfigRequest'
type: array
discountDefault:
description: Default discount applied when the item is added to a document.
maximum: 100
minimum: 0
type: number
itemName:
description: Display name of the catalog item.
type: string
itemResourceId:
description: Resource ID of the underlying item.
type: string
price:
description: Default unit price.
maximum: 1000000000
minimum: 0
type: number
quantityDefault:
description: Default quantity when the item is added to a document.
maximum: 100
minimum: 0
type: number
uiIndex:
description: Display position of the item in the catalog.
minimum: 0
type: integer
unit:
description: Unit of measure.
type: string
required:
- itemName
- itemResourceId
- price
type: object
SearchCatalogRequest:
properties:
filter:
allOf:
- $ref: '#/components/schemas/CatalogFilter'
description: Filter conditions. Combine with and and or for complex queries.
limit:
default: 100
description: Maximum number of results per page (max 1000).
maximum: 1000
minimum: 1
type: integer
offset:
default: 0
description: Zero-indexed row offset into the result set. Sort is required when offset is set.
maximum: 65536
minimum: 0
type: integer
query:
description: 'Structured search query using Jaz search operators. Parsed automatically into filter fields.
Explicit filter fields override query results on conflict.
Example: "status:unpaid AND $500+".'
maxLength: 1000
type: string
sort:
allOf:
- $ref: '#/components/schemas/CatalogSortFilter'
description: Sort order. Required when offset is set.
type: object
CatalogSortFilter:
properties:
order:
description: Sort direction, ASC or DESC.
enum:
- ASC
- asc
- DESC
- desc
type: string
sortBy:
description: Fields to sort by, in priority order.
items:
type: string
maxItems: 13
type: array
uniqueItems: true
required:
- sortBy
type: object
ErrorResponseData:
properties:
error_type:
description: Error category, for example validation_error, invalid_request_body, or internal_server_error.
example: validation_error
type: string
errors:
description: Error messages describing what went wrong.
items:
type: string
type: array
type: object
securitySchemes:
ApiKeyAuth:
description: Organization API key. Pass it in the x-jk-api-key header on every request.
in: header
name: x-jk-api-key
type: apiKey
x-refined-from:
- tinvio-com-openapi-original.yaml
- tinvio-com-openapi.yml