ARPI Inc. Diag API

Medical image analysis API. Requires Bearer token.

Operations 9

GET /api/v1/diag List my analyses #
POST /api/v1/diag Submit analysis #
GET /api/v1/diag/{jobId}/result Get analysis result #
GET /api/v1/diag/{jobId}/products Get product projections #
GET /api/v1/diag/{jobId}/comment Get AI comment (LLM) #
POST /api/v1/diag/{jobId}/retry Retry analysis #
PATCH /api/v1/diag/{jobId}/title Update my analysis title #
GET /api/v1/diag/available Get my quota availability #
GET /api/v1/diag/usage Get my usage #

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/arpi-ai:arpi-ai-diag-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

arpi-ai-diag-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: ECG Buddy Diag API
  description: 'Welcome to the **ECG Buddy API** 👋


    This API lets your system upload ECGs (images, or signal XML on the v2 engine) and get back AI-powered analysis results — all through a simple submit-and-poll flow. ---


    ## 🚀 Quick Start


    Get your first analysis result in 3 steps:


    **1. Get an access token**


    ```bash

    curl -X POST https://openapi.arpi.ai/api/v1/hospital/login \

    -H "Content-Type: application/json" \

    -d ''{"hospitalId": "your-client-id", "hospitalSecret": "your-client-secret"}''

    ```


    **2. Submit an image for analysis**


    ```bash

    curl -X POST https://openapi.arpi.ai/api/v1/diag \

    -H "Authorization: Bearer {accessToken}" \

    -F "file=@ecg.png"

    ```


    You''ll get a `jobId` back. Hold on to it. **3. Poll for the result**


    ```bash

    curl https://openapi.arpi.ai/api/v1/diag/{jobId}/result \

    -H "Authorization: Bearer {accessToken}"

    ```


    Poll every **2 seconds**. The response status tells you where you are:

    - `202` → still processing, keep polling

    - `200` → done! Result files are in the response

    - `500` → something went wrong (you can retry — see below)


    > ⏱️ **Tip:** Under heavy load a job may wait in the queue before processing begins; keep polling for up to ~15 minutes (450 attempts) before treating it as a timeout. ---


    ## 🔐 Authentication


    This API uses the **OAuth 2.0 Client Credentials Grant** flow. You authenticate with a **Client ID** and **Client Secret** to obtain a short-lived JWT access token, then send that token on every subsequent request. | Step | What you do |

    |------|-------------|

    | 1 | `POST /api/v1/hospital/login` with your **Client ID** and **Client Secret** |

    | 2 | Receive `accessToken` (JWT, expires in 5 minutes) |

    | 3 | Send `Authorization: Bearer {accessToken}` on every API request |

    | 4 | When the token expires, request a new one with the same credentials |


    > 📝 **Field naming note:** In the request body, your Client ID goes in the `hospitalId` field and your Client Secret goes in the `hospitalSecret` field. The field names are kept for backward compatibility — treat them as your standard OAuth 2.0 client credentials. > 🔑 **Need credentials?** Reach out to your Arpi contact if you already have one — otherwise email **support@arpi.ai** and we''ll get you set up. ---


    ## 📁 What you can submit


    ECG **images** work on any engine. **Signal XML** is supported on the **v2** engine — pass `?engine=v2` (see the submit endpoint). | Input | Formats | Engine |

    |-------|---------|--------|

    | ECG image | JPEG, PNG | v1, v2 |

    | Signal XML | GE MUSE, Philips, Fukuda (HL7 aECG), Nihon Kohden (MFER) | v2 only |


    - **Max size:** 20 MB. - **Signal XML needs `engine=v2`.** On the legacy v1 engine only images are analyzed; XML sent to v1 never completes and fails on timeout. - A successful signal-XML job returns the **same result types as an image job** (MAIN, GRAPHICAL, CARDIO, VHD, EU, comment). - An input the engine can''t interpret (unsupported/corrupt XML, unreadable image) is **not rejected at submit** — the job is accepted, then reported as **FAILED (`500 D999`)** when you poll `/result` (or via a FAILED callback). It stays retry-eligible for 24h. ---


    ## 🔄 Retry behavior


    If an analysis fails, you have **24 hours** to retry it for free using `POST /api/v1/diag/{jobId}/retry` — the same file is re-analyzed and your quota isn''t charged twice. After 24 hours, the deferred refund is processed automatically and you''ll need to submit a new analysis. ---


    ## 📊 Quota management


    Each client has daily and monthly analysis quotas based on your plan. - `GET /api/v1/diag/available` → Check what''s left right now

    - `GET /api/v1/diag/usage` → See historical usage (up to 90 days)


    If you hit the limit, submit calls will return `402 Payment Required` with code `S001`.'
  contact:
    name: Arpi
    email: support@arpi.ai
  version: v1
servers:
- url: https://openapi.arpi.ai
  description: prod
- url: https://openapi.dev.arpi.ai
  description: dev
tags:


# --- truncated at 32 KB (56 KB total) ---
# Full source: https://artifacts.apis.io/arpi-ai/openapi/arpi-ai-diag-api-openapi.yml