OrdoGrid Meta API

API identity, capabilities, scope catalogue and public specification.

Operations 3

GET /api/v1/me Identify company and key capabilities #
GET /api/v1/openapi.json Read the public OpenAPI specification #
GET /api/v1/scopes List available API scopes #

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/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 Specification

ordogrid-meta-api-openapi.yml Raw ↑
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