Causa Prima Scribo API

The Scribo API from Causa Prima — 4 operation(s) for scribo.

Operations 4

POST /api/v1/scribo/email-verifications Request a sender email-ownership challenge
POST /api/v1/scribo/email-verifications/{id}/redeem Redeem the emailed code for a verification token
GET /api/v1/scribo/email-verifications/{id} Verification challenge status snapshot
GET /api/v1/scribo/email-verifications/{id}/events Verification challenge event stream

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/causa-prima-scribo-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

causa-prima-scribo-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Invoice Invoices Scribo API
  version: 1.0.0
  description: Compliant e-invoice generation. **Phase 1 supports Germany (XRechnung / ZUGFeRD) and the United States (plain PDF) only** — any other sender jurisdiction is rejected with `unsupported_jurisdiction`. The `/api/v1/*` namespace served from `scribo.causaprima.ai` is the public surface — anonymous and rate-limited. The internal `/internal/scribo/*` namespace is used by the Causa Prima web app and MCP server and is not part of this contract.
  contact:
    name: Causa Prima
    url: https://causaprima.ai
servers:
- url: https://scribo.causaprima.ai
  description: Production
- url: http://localhost:3200
  description: Local development (scribo Next.js proxy)
tags:
- name: Scribo
paths:
  /api/v1/scribo/email-verifications:
    post:
      summary: Request a sender email-ownership challenge
      description: Emails a 6-character verification code (and magic link) to the address. Always returns a uniform 202 — new, returning, throttled, and send-failed callers are indistinguishable (anti-enumeration). Sends are rate-limited per email (resend cooldown + hourly cap).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestVerificationInput'
      responses:
        '202':
          description: Challenge accepted (uniform anti-enumeration shape)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerificationChallenge'
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      tags:
      - Scribo
  /api/v1/scribo/email-verifications/{id}/redeem:
    post:
      summary: Redeem the emailed code for a verification token
      description: Exchanges the 6-character code for a verification_token, sent as X-Email-Verification-Token on POST /invoices. The token is reusable for ~30 minutes for the same sender email.
      parameters:
      - schema:
          type: string
          format: uuid
          description: Challenge UUID
        required: true
        name: id
        in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedeemVerificationInput'
      responses:
        '200':
          description: Code accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerificationToken'
        '400':
          description: Wrong, expired, or revoked code — uniform verification_invalid across all three causes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      tags:
      - Scribo
  /api/v1/scribo/email-verifications/{id}:
    get:
      summary: Verification challenge status snapshot
      description: Polling fallback for browser flows waiting on the emailed magic link. verification_token is present only when status is `verified`.
      parameters:
      - schema:
          type: string
          format: uuid
          description: Challenge UUID
        required: true
        name: id
        in: path
      responses:
        '200':
          description: Challenge status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerificationSnapshot'
      tags:
      - Scribo
  /api/v1/scribo/email-verifications/{id}/events:
    get:
      summary: Verification challenge event stream
      description: Server-Sent Events stream of challenge status transitions; closes after `verified`. Browser flows use this instead of polling the snapshot endpoint.
      parameters:
      - schema:
          type: string
          format: uuid
          description: Challenge UUID
        required: true
        name: id
        in: path
      responses:
        '200':
          description: SSE stream
          content:
            text/event-stream:
              schema:
                type: string
      tags:
      - Scribo
components:
  schemas:
    VerificationChallenge:
      type: object
      properties:
        challenge_id:
          type: string
          format: uuid
        expires_at:
          type: string
          format: date-time
        next_request_allowed_at:
          type: string
          format: date-time
      required:
      - challenge_id
      - expires_at
      - next_request_allowed_at
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_input
            message:
              type: string
            details: {}
          required:
          - code
          - message
      required:
      - error
    VerificationSnapshot:
      oneOf:
      - type: object
        properties:
          status:
            type: string
            enum:
            - pending
          expires_at:
            type: string
        required:
        - status
        - expires_at
      - type: object
        properties:
          status:
            type: string
            enum:
            - verified
          verification_token:
            type: string
          expires_at:
            type: string
        required:
        - status
        - verification_token
        - expires_at
      - type: object
        properties:
          status:
            type: string
            enum:
            - expired
        required:
        - status
      - type: object
        properties:
          status:
            type: string
            enum:
            - revoked
        required:
        - status
    RequestVerificationInput:
      type: object
      properties:
        email:
          type: string
          minLength: 3
          maxLength: 254
          format: email
      required:
      - email
      additionalProperties: false
    RedeemVerificationInput:
      type: object
      properties:
        code:
          type: string
          minLength: 1
          maxLength: 64
      required:
      - code
      additionalProperties: false
    VerificationToken:
      type: object
      properties:
        verification_token:
          type: string
        expires_at:
          type: string
          format: date-time
      required:
      - verification_token
      - expires_at
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Optional API key for elevated quotas. Unauthenticated requests are accepted and rate-limited per IP.