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/ordogrid:ordogrid-meta-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: 3.2.0
info:
description: 'Company-scoped REST API for invoicing, Peppol and loyalty.
**Getting started.** Create a key in Company → API keys, grant only the needed
scopes, and call `GET /api/v1/me`. Send `Authorization: Bearer ik_live_...` or
`X-Api-Key: ik_live_...`. The key identifies the company; no company header is
needed. Session cookies do not authenticate business endpoints. This OpenAPI
document is public metadata and contains no company or API-key values.
**Scopes.** Every operation lists all required scopes. `resource:write` implies
the registered `resource:read` scope. `peppol:send` and `fidelity:points:write`
are standalone. Invoice prepayments additionally require `payments:write`.
**Retry safety.** Operations that accept `Idempotency-Key` replay successful
responses for 24 hours with `Idempotent-Replay: true`. Reusing a key for different
contents returns 409 `IDEMPOTENCY_KEY_REUSED`; in-flight retries return 409
`IDEMPOTENT_REQUEST_IN_PROGRESS`. Header support is shown only where implemented.
Document and financial movement `external_id` values provide durable recovery
within the key''s integration namespace, including after key rotation. Loyalty
movements also accept a body `idempotency_key` stored on the ledger.
**Money and settlement.** Document totals are JSON numbers. Financial amounts
and settlement summaries are exact decimal strings; send decimal strings for
payments. Check `/me` capabilities for currency precision and supported payment
methods. Payment/refund operations record already-confirmed money movements.
**Lists.** Paginated operations accept `limit` (1–100, default 25) and `offset`.
Loyalty members and ledger round to 25/50/100-row pages. Scope, reward and card
lists and financial history do not paginate.
**Rate limits.** Authenticated calls are limited per key, per minute. Calls that
reach the limiter carry `X-RateLimit-Limit`, `X-RateLimit-Remaining` and
`X-RateLimit-Reset` (seconds until reset); 429 also carries `Retry-After`.
**Errors.** JSON `{"code": "...", "message": "...", "details": {...}}`.
`details` is optional. Branch on stable `code`, since messages may change.
Unknown request fields are rejected on clients, documents, Peppol sends, members,
points, rewards and cards. Program settings are normalized separately.
**Peppol.** Structured fields build UBL XML. `POST /api/v1/peppol/send` creates
an invoice and transmits it; supplying `pdf` uses your exact rendering as its
attachment. Existing invoices and credit notes have dedicated send routes.
Approval and monthly quota apply. Archive the exchanged XML and original PDF;
`view=current` renders the current settlement and can differ from issued bytes.
For an uncertain transmission, read its status and reconcile the outcome before
attempting another send.'
title: OrdoGrid Public Meta API
version: 1.4.0
servers:
- url: /
security:
- ApiKeyAuth: []
- ApiKeyHeader: []
tags:
- description: API identity, capabilities, scope catalogue and public specification.
name: Meta
paths:
/api/v1/me:
get:
operationId: get_api_v1_meta_whoami
parameters: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ApiIdentity'
description: Success
headers:
X-RateLimit-Limit:
description: Requests permitted per minute for this key.
schema:
type: integer
X-RateLimit-Remaining:
description: Requests remaining in this window.
schema:
type: integer
X-RateLimit-Reset:
description: Seconds until the rate limit window resets.
schema:
type: integer
'400':
content:
application/json:
example:
code: VALIDATION_ERROR
message: Invalid request
schema:
$ref: '#/components/schemas/Error'
description: 'Invalid request. Possible code values: VALIDATION_ERROR, UNKNOWN_FIELD, INVALID_VAT_NUMBER.'
'401':
content:
application/json:
example:
code: API_KEY_REQUIRED
message: Missing, malformed, revoked or expired API key
schema:
$ref: '#/components/schemas/Error'
description: 'Missing, malformed, revoked or expired API key. Possible code values: API_KEY_REQUIRED, INVALID_API_KEY, API_KEY_REVOKED, API_KEY_EXPIRED.'
'403':
content:
application/json:
example:
code: INSUFFICIENT_SCOPE
message: Key scope, company or subscription refused the call
schema:
$ref: '#/components/schemas/Error'
description: 'Key scope, company or subscription refused the call. Possible code values: INSUFFICIENT_SCOPE, COMPANY_SUSPENDED, PEPPOL_APPROVAL_REQUIRED, PEPPOL_LIMIT_REACHED, SUBSCRIPTION_REQUIRED, FIDELITY_NOT_ENABLED.'
'404':
content:
application/json:
example:
code: NOT_FOUND
message: Not found in this company
schema:
$ref: '#/components/schemas/Error'
description: 'Not found in this company. Possible code values: NOT_FOUND, CLIENT_NOT_FOUND, PDF_NOT_AVAILABLE, XML_NOT_AVAILABLE, FIDELITY_MEMBER_NOT_FOUND, REWARD_NOT_FOUND.'
'422':
content:
application/json:
example:
code: BUSINESS_RULE_ERROR
message: Business rule refused the operation
schema:
$ref: '#/components/schemas/Error'
description: 'Business rule refused the operation. Possible code values: BUSINESS_RULE_ERROR, ILLEGAL_STATUS_TRANSITION, INSUFFICIENT_POINTS.'
'429':
content:
application/json:
example:
code: RATE_LIMITED
message: API key rate limit exceeded
schema:
$ref: '#/components/schemas/Error'
description: 'API key rate limit exceeded. Possible code values: RATE_LIMITED.'
headers:
Retry-After:
description: Seconds until retry is allowed.
schema:
type: integer
'500':
content:
application/json:
example:
code: INTERNAL_ERROR
message: Unexpected server error
schema:
$ref: '#/components/schemas/Error'
description: 'Unexpected server error. Possible code values: INTERNAL_ERROR.'
security:
- ApiKeyAuth: []
- ApiKeyHeader: []
summary: Identify company and key capabilities
tags:
- Meta
/api/v1/openapi.json:
get:
operationId: get_api_v1_meta_openapi_document
parameters: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/OpenApiDocument'
description: Success
'500':
content:
application/json:
example:
code: INTERNAL_ERROR
message: Unexpected server error
schema:
$ref: '#/components/schemas/Error'
description: 'Unexpected server error. Possible code values: INTERNAL_ERROR.'
security: []
summary: Read the public OpenAPI specification
tags:
- Meta
/api/v1/scopes:
get:
operationId: get_api_v1_meta_list_scopes
parameters: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ScopeList'
description: Success
headers:
X-RateLimit-Limit:
description: Requests permitted per minute for this key.
schema:
type: integer
X-RateLimit-Remaining:
description: Requests remaining in this window.
schema:
type: integer
X-RateLimit-Reset:
description: Seconds until the rate limit window resets.
schema:
type: integer
'400':
content:
application/json:
example:
code: VALIDATION_ERROR
message: Invalid request
schema:
$ref: '#/components/schemas/Error'
description: 'Invalid request. Possible code values: VALIDATION_ERROR, UNKNOWN_FIELD, INVALID_VAT_NUMBER.'
'401':
content:
application/json:
example:
code: API_KEY_REQUIRED
message: Missing, malformed, revoked or expired API key
schema:
$ref: '#/components/schemas/Error'
description: 'Missing, malformed, revoked or expired API key. Possible code values: API_KEY_REQUIRED, INVALID_API_KEY, API_KEY_REVOKED, API_KEY_EXPIRED.'
'403':
content:
application/json:
example:
code: INSUFFICIENT_SCOPE
message: Key scope, company or subscription refused the call
schema:
$ref: '#/components/schemas/Error'
description: 'Key scope, company or subscription refused the call. Possible code values: INSUFFICIENT_SCOPE, COMPANY_SUSPENDED, PEPPOL_APPROVAL_REQUIRED, PEPPOL_LIMIT_REACHED, SUBSCRIPTION_REQUIRED, FIDELITY_NOT_ENABLED.'
'404':
content:
application/json:
example:
code: NOT_FOUND
message: Not found in this company
schema:
$ref: '#/components/schemas/Error'
description: 'Not found in this company. Possible code values: NOT_FOUND, CLIENT_NOT_FOUND, PDF_NOT_AVAILABLE, XML_NOT_AVAILABLE, FIDELITY_MEMBER_NOT_FOUND, REWARD_NOT_FOUND.'
'422':
content:
application/json:
example:
code: BUSINESS_RULE_ERROR
message: Business rule refused the operation
schema:
$ref: '#/components/schemas/Error'
description: 'Business rule refused the operation. Possible code values: BUSINESS_RULE_ERROR, ILLEGAL_STATUS_TRANSITION, INSUFFICIENT_POINTS.'
'429':
content:
application/json:
example:
code: RATE_LIMITED
message: API key rate limit exceeded
schema:
$ref: '#/components/schemas/Error'
description: 'API key rate limit exceeded. Possible code values: RATE_LIMITED.'
headers:
Retry-After:
description: Seconds until retry is allowed.
schema:
type: integer
'500':
content:
application/json:
example:
code: INTERNAL_ERROR
message: Unexpected server error
schema:
$ref: '#/components/schemas/Error'
description: 'Unexpected server error. Possible code values: INTERNAL_ERROR.'
security:
- ApiKeyAuth: []
- ApiKeyHeader: []
summary: List available API scopes
tags:
- Meta
components:
schemas:
ApiCapabilities:
properties:
contract_version:
type: string
currencies:
items:
properties:
code:
type: string
minor_unit:
type: integer
type: object
type: array
margin_schemes:
items:
$ref: '#/components/schemas/MarginCapability'
type: array
overpayment_policy:
const: refuse
payment_methods:
items:
type: string
type: array
payment_operations:
items:
type: string
type: array
settlement_version:
type: string
type: object
ApiIdentity:
properties:
api_key:
properties:
effective_scopes:
items:
type: string
type: array
expires_at:
description: UTC, ISO 8601 with milliseconds and Z, e.g. 2026-10-22T10:00:00.123Z.
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
type:
- string
- 'null'
id:
example: 507f1f77bcf86cd799439011
pattern: ^[a-fA-F0-9]{24}$
type: string
integration_id:
type: string
masked_token:
type: string
name:
type: string
rate_limit_per_minute:
type: integer
scopes:
items:
type: string
type: array
type: object
capabilities:
$ref: '#/components/schemas/ApiCapabilities'
company:
properties:
id:
example: 507f1f77bcf86cd799439011
pattern: ^[a-fA-F0-9]{24}$
type: string
name:
type: string
vat_number:
type:
- string
- 'null'
type: object
object:
const: api_identity
type: object
MarginCapability:
properties:
contract_version:
type: string
credit_policy:
type: string
currency:
type: string
exemption_reason_code:
type: string
jurisdiction:
type: string
profile:
type: string
scheme:
type: string
scope:
type: string
supplier_statuses:
items:
type: string
type: array
tax_rates:
items:
type: number
type: array
wire_category:
type: string
type: object
OpenApiDocument:
properties:
components:
type: object
info:
properties:
description:
type: string
title:
type: string
version:
type: string
type: object
openapi:
const: 3.1.0
paths:
additionalProperties:
type: object
type: object
servers:
items:
properties:
url:
type: string
type: object
type: array
required:
- openapi
- info
- paths
type: object
Error:
properties:
code:
description: Stable machine-readable code. Branch on this.
type: string
details:
description: Context, e.g. which fields were unexpected.
type: object
message:
description: Human-readable prose. May change.
type: string
required:
- code
- message
type: object
ScopeList:
properties:
data:
items:
properties:
description:
type: string
scope:
type: string
required:
- scope
- description
type: object
type: array
object:
const: list
type: object
securitySchemes:
ApiKeyAuth:
bearerFormat: API key
description: Company-scoped key prefixed ik_live_. Create it in Company → API keys. X-Api-Key is also accepted.
scheme: bearer
type: http
ApiKeyHeader:
description: 'Alternative to Authorization: Bearer.'
in: header
name: X-Api-Key
type: apiKey