FluentEDI Edi API

EDI and retail supply chain (X12)

Operations 12

GET /v1/edi/parse Parse an X12 EDI document (850, 856, 810, 855, 997 and others) into structured… #
POST /v1/edi/parse Parse an X12 EDI document (850, 856, 810, 855, 997 and others) into structured… #
GET /v1/edi/validate Check an X12 document's envelope integrity and 856 HL hierarchy for the errors… #
POST /v1/edi/validate Check an X12 document's envelope integrity and 856 HL hierarchy for the errors… #
GET /v1/edi/build Generate a valid X12 856 ASN or 850 purchase order from JSON, with correct HL… #
POST /v1/edi/build Generate a valid X12 856 ASN or 850 purchase order from JSON, with correct HL… #
GET /v1/edi/acknowledge Read a 997 or 999 acknowledgment and say which documents were accepted, which… #
POST /v1/edi/acknowledge Read a 997 or 999 acknowledgment and say which documents were accepted, which… #
GET /v1/gs1/checkdigit Calculate or validate a GS1 mod-10 check digit for SSCC-18, GTIN-14/13/12/8 and… #
POST /v1/gs1/checkdigit Calculate or validate a GS1 mod-10 check digit for SSCC-18, GTIN-14/13/12/8 and… #
GET /v1/id/validate Validate an identifier's checksum: IBAN, card, ISBN, ISSN, ISIN, CUSIP, LEI… #
POST /v1/id/validate Validate an identifier's checksum: IBAN, card, ISBN, ISSN, ISIN, CUSIP, LEI… #

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/fluentedi-edi-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

fluentedi-edi-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FluentEDI Edi API
  version: 1.1.0
  summary: Deterministic tools for AI agents. No key, no signup, no SDK.
  description: 'A public HTTP API of deterministic tools for the work a language model cannot do reliably by reasoning: knowing the current time in any timezone and whether an instant falls inside a window, exact arithmetic, hashing and signature verification, canonicalizing and content-addressing JSON, repairing malformed JSON and pinpointing where it broke, querying and diffing structured data, parsing CSV correctly, converting units, colours and currencies at live ECB rates, testing regular expressions…'
  license:
    name: Free to use
    identifier: MIT
servers:
- url: https://fluentedi.com
tags:
- name: Edi
  description: EDI and retail supply chain (X12)
paths:
  /v1/edi/parse:
    get:
      operationId: edi_parse_get
      summary: Parse an X12 EDI document (850, 856, 810, 855, 997 and others) into structured…
      description: 'Reads a raw ASC X12 interchange and returns it as JSON: delimiters taken from the ISA header, the ISA/GS/ST envelope decoded, every segment split into named elements, and a document-specific summary - purchase order lines for an 850, the HL shipment hierarchy and SSCCs for an 856, invoice totals for an 810. EDI is positional and delimiter-sensitive, and unreadable without a spec table; reading it by inspection produces confident nonsense, which is why this is a tool rather than a prompt.'
      tags:
      - Edi
      parameters:
      - name: input
        in: query
        required: true
        description: Raw X12 EDI text, beginning with ISA where available.
        schema:
          description: Raw X12 EDI text, beginning with ISA where available.
          type: string
          maxLength: 2000000
      - name: include_segments
        in: query
        required: false
        description: Include the flat segment list alongside the summary.
        schema:
          description: Include the flat segment list alongside the summary.
          type: boolean
          default: true
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: edi_parse_post
      summary: Parse an X12 EDI document (850, 856, 810, 855, 997 and others) into structured…
      description: 'Reads a raw ASC X12 interchange and returns it as JSON: delimiters taken from the ISA header, the ISA/GS/ST envelope decoded, every segment split into named elements, and a document-specific summary - purchase order lines for an 850, the HL shipment hierarchy and SSCCs for an 856, invoice totals for an 810. EDI is positional and delimiter-sensitive, and unreadable without a spec table; reading it by inspection produces confident nonsense, which is why this is a tool rather than a prompt.'
      tags:
      - Edi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                input:
                  description: Raw X12 EDI text, beginning with ISA where available.
                  type: string
                  maxLength: 2000000
                include_segments:
                  description: Include the flat segment list alongside the summary.
                  type: boolean
                  default: true
              required:
              - input
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
  /v1/edi/validate:
    get:
      operationId: edi_validate_get
      summary: Check an X12 document's envelope integrity and 856 HL hierarchy for the errors…
      description: 'Runs the structural checks a trading partner runs before rejecting a file: control numbers matching between the ISA/IEA, GS/GE and ST/SE header and trailer pairs, declared counts matching actual counts, and - for an 856 - the HL hierarchy. HL faults are the usual cause of ASN rejections and chargebacks: a parent ID naming no existing node, a duplicate HL01, an unknown level code, a missing carton level. Every finding names the segment and states what the value should have been.'
      tags:
      - Edi
      parameters:
      - name: input
        in: query
        required: true
        description: Raw X12 EDI text.
        schema:
          description: Raw X12 EDI text.
          type: string
          maxLength: 2000000
      - name: require_levels
        in: query
        required: false
        description: HL level codes that must be present in an 856, e.g. ["S","O","P","I"] for a pack-level ASN.
        schema:
          description: HL level codes that must be present in an 856, e.g. ["S","O","P","I"] for a pack-level ASN.
          type: array
          default: []
          items:
            type: string
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: edi_validate_post
      summary: Check an X12 document's envelope integrity and 856 HL hierarchy for the errors…
      description: 'Runs the structural checks a trading partner runs before rejecting a file: control numbers matching between the ISA/IEA, GS/GE and ST/SE header and trailer pairs, declared counts matching actual counts, and - for an 856 - the HL hierarchy. HL faults are the usual cause of ASN rejections and chargebacks: a parent ID naming no existing node, a duplicate HL01, an unknown level code, a missing carton level. Every finding names the segment and states what the value should have been.'
      tags:
      - Edi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                input:
                  description: Raw X12 EDI text.
                  type: string
                  maxLength: 2000000
                require_levels:
                  description: HL level codes that must be present in an 856, e.g. ["S","O","P","I"] for a pack-level ASN.
                  type: array
                  default: []
                  items:
                    type: string
              required:
              - input
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
  /v1/edi/build:
    get:
      operationId: edi_build_get
      summary: Generate a valid X12 856 ASN or 850 purchase order from JSON, with correct HL…
      description: 'Compiles structured JSON into standards-valid X12. The parts that get documents rejected are exactly the parts a language model cannot hold in its head: the 856 hierarchy needs sequential HL IDs where every level names its parent''s ID, and on a multi-carton, multi-SKU shipment that bookkeeping goes wrong silently. The ISA header is fixed-width — 106 characters exactly, every element space-padded to size — and one character out crashes the receiver''s translator. Segment counts in SE01, CTT01, GE01 and IEA01 must agree with what was actually emitted. All of that is computed here rather than written by hand.'
      tags:
      - Edi
      parameters:
      - name: document
        in: query
        required: false
        description: Transaction set to build.
        schema:
          description: Transaction set to build.
          type: string
          enum:
          - '856'
          - '850'
          default: '856'
      - name: data
        in: query
        required: true
        description: 'Document content. For 856: {shipment_id, ship_date, orders:[{po_number, packs:[{sscc, items:[{upc, quantity, unit}]}]}], parties:[{role,name,id}]}. For 850: {po_number, order_date, lines:[{quantity, unit, unit_price, upc, description}], parties:[...]}.'
        schema:
          description: 'Document content. For 856: {shipment_id, ship_date, orders:[{po_number, packs:[{sscc, items:[{upc, quantity, unit}]}]}], parties:[{role,name,id}]}. For 850: {po_number, order_date, lines:[{quantity, unit, unit_price, upc, description}], parties:[...]}.'
          type: object
      - name: sender_id
        in: query
        required: false
        description: ISA06 sender identifier.
        schema:
          description: ISA06 sender identifier.
          type: string
          default: SENDER
          maxLength: 15
      - name: receiver_id
        in: query
        required: false
        description: ISA08 receiver identifier.
        schema:
          description: ISA08 receiver identifier.
          type: string
          default: RECEIVER
          maxLength: 15
      - name: sender_qualifier
        in: query
        required: false
        description: ISA05 qualifier, e.g. ZZ, 01 (DUNS), 12 (phone).
        schema:
          description: ISA05 qualifier, e.g. ZZ, 01 (DUNS), 12 (phone).
          type: string
          default: ZZ
          maxLength: 2
      - name: receiver_qualifier
        in: query
        required: false
        description: ISA07 qualifier.
        schema:
          description: ISA07 qualifier.
          type: string
          default: ZZ
          maxLength: 2
      - name: control_number
        in: query
        required: false
        description: Interchange control number (ISA13). Also seeds GS06 and ST02.
        schema:
          description: Interchange control number (ISA13). Also seeds GS06 and ST02.
          type: integer
          default: 1
          minimum: 1
      - name: test_indicator
        in: query
        required: false
        description: Mark the interchange as test (ISA15 = T) rather than production (P).
        schema:
          description: Mark the interchange as test (ISA15 = T) rather than production (P).
          type: boolean
          default: true
      - name: timestamp
        in: query
        required: false
        description: ISO instant for the envelope date/time. Defaults to now.
        schema:
          description: ISO instant for the envelope date/time. Defaults to now.
          type: string
          default: ''
      - name: include_envelope
        in: query
        required: false
        description: Wrap the transaction set in ISA/GS ... GE/IEA.
        schema:
          description: Wrap the transaction set in ISA/GS ... GE/IEA.
          type: boolean
          default: true
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: edi_build_post
      summary: Generate a valid X12 856 ASN or 850 purchase order from JSON, with correct HL…
      description: 'Compiles structured JSON into standards-valid X12. The parts that get documents rejected are exactly the parts a language model cannot hold in its head: the 856 hierarchy needs sequential HL IDs where every level names its parent''s ID, and on a multi-carton, multi-SKU shipment that bookkeeping goes wrong silently. The ISA header is fixed-width — 106 characters exactly, every element space-padded to size — and one character out crashes the receiver''s translator. Segment counts in SE01, CTT01, GE01 and IEA01 must agree with what was actually emitted. All of that is computed here rather than written by hand.'
      tags:
      - Edi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                document:
                  description: Transaction set to build.
                  type: string
                  enum:
                  - '856'
                  - '850'
                  default: '856'
                data:
                  description: 'Document content. For 856: {shipment_id, ship_date, orders:[{po_number, packs:[{sscc, items:[{upc, quantity, unit}]}]}], parties:[{role,name,id}]}. For 850: {po_number, order_date, lines:[{quantity, unit, unit_price, upc, description}], parties:[...]}.'
                  type: object
                sender_id:
                  description: ISA06 sender identifier.
                  type: string
                  default: SENDER
                  maxLength: 15
                receiver_id:
                  description: ISA08 receiver identifier.
                  type: string
                  default: RECEIVER
                  maxLength: 15
                sender_qualifier:
                  description: ISA05 qualifier, e.g. ZZ, 01 (DUNS), 12 (phone).
                  type: string
                  default: ZZ
                  maxLength: 2
                receiver_qualifier:
                  description: ISA07 qualifier.
                  type: string
                  default: ZZ
                  maxLength: 2
                control_number:
                  description: Interchange control number (ISA13). Also seeds GS06 and ST02.
                  type: integer
                  default: 1
                  minimum: 1
                test_indicator:
                  description: Mark the interchange as test (ISA15 = T) rather than production (P).
                  type: boolean
                  default: true
                timestamp:
                  description: ISO instant for the envelope date/time. Defaults to now.
                  type: string
                  default: ''
                include_envelope:
                  description: Wrap the transaction set in ISA/GS ... GE/IEA.
                  type: boolean
                  default: true
              required:
              - data
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
  /v1/edi/acknowledge:
    get:
      operationId: edi_acknowledge_get
      summary: Read a 997 or 999 acknowledgment and say which documents were accepted, which…
      description: 'Decodes a Functional Acknowledgment into an answer rather than a code. A 997 reports its verdict as bare letters and numbers — AK5 of R with error 5, AK3 of 7, AK4 element 2 code 7 — which say nothing without a code table. This resolves every one into plain language, points at the failing segment position and element, and, if you supply the control numbers you sent, reconciles them so you can see what was acknowledged, what was rejected, and what never came back at all. Silence is the failure mode that costs money: an unacknowledged document is not a delivered one.'
      tags:
      - Edi
      parameters:
      - name: input
        in: query
        required: true
        description: Raw 997 or 999 acknowledgment text.
        schema:
          description: Raw 997 or 999 acknowledgment text.
          type: string
          maxLength: 500000
      - name: sent
        in: query
        required: false
        description: Transaction set control numbers you sent (ST02 values), to reconcile against. e.g. ["0001","0002"].
        schema:
          description: Transaction set control numbers you sent (ST02 values), to reconcile against. e.g. ["0001","0002"].
          type: array
          default: []
          items:
            type: string
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: edi_acknowledge_post
      summary: Read a 997 or 999 acknowledgment and say which documents were accepted, which…
      description: 'Decodes a Functional Acknowledgment into an answer rather than a code. A 997 reports its verdict as bare letters and numbers — AK5 of R with error 5, AK3 of 7, AK4 element 2 code 7 — which say nothing without a code table. This resolves every one into plain language, points at the failing segment position and element, and, if you supply the control numbers you sent, reconciles them so you can see what was acknowledged, what was rejected, and what never came back at all. Silence is the failure mode that costs money: an unacknowledged document is not a delivered one.'
      tags:
      - Edi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                input:
                  description: Raw 997 or 999 acknowledgment text.
                  type: string
                  maxLength: 500000
                sent:
                  description: Transaction set control numbers you sent (ST02 values), to reconcile against. e.g. ["0001","0002"].
                  type: array
                  default: []
                  items:
                    type: string
              required:
              - input
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
  /v1/gs1/checkdigit:
    get:
      operationId: gs1_checkdigit_get
      summary: Calculate or validate a GS1 mod-10 check digit for SSCC-18, GTIN-14/13/12/8 and…
      description: 'Computes the GS1 mod-10 check digit, or validates a complete code and says what the digit should have been. Also catches the failure behind most real-world barcode and ASN mismatches: a spreadsheet dropping leading zeros or rendering the identifier in scientific notation, silently changing it. Pass a full code to validate, or the payload without its final digit to compute one.'
      tags:
      - Edi
      parameters:
      - name: code
        in: query
        required: true
        description: The code, with or without its check digit. Spaces and hyphens are ignored.
        schema:
          description: The code, with or without its check digit. Spaces and hyphens are ignored.
          type: string
          maxLength: 64
          examples:
          - 00614141123456789
      - name: length
        in: query
        required: false
        description: Expected total length (8, 12, 13, 14 or 18). Inferred when omitted.
        schema:
          description: Expected total length (8, 12, 13, 14 or 18). Inferred when omitted.
          type: integer
          default: 0
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: gs1_checkdigit_post
      summary: Calculate or validate a GS1 mod-10 check digit for SSCC-18, GTIN-14/13/12/8 and…
      description: 'Computes the GS1 mod-10 check digit, or validates a complete code and says what the digit should have been. Also catches the failure behind most real-world barcode and ASN mismatches: a spreadsheet dropping leading zeros or rendering the identifier in scientific notation, silently changing it. Pass a full code to validate, or the payload without its final digit to compute one.'
      tags:
      - Edi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  description: The code, with or without its check digit. Spaces and hyphens are ignored.
                  type: string
                  maxLength: 64
                  examples:
                  - 00614141123456789
                length:
                  description: Expected total length (8, 12, 13, 14 or 18). Inferred when omitted.
                  type: integer
                  default: 0
              required:
              - code
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
  /v1/id/validate:
    get:
      operationId: id_validate_get
      summary: 'Validate an identifier''s checksum: IBAN, card, ISBN, ISSN, ISIN, CUSIP, LEI…'
      description: Runs the real check algorithm for twenty-odd identifier schemes and says both whether it passes and what passing does not prove — which is usually the more useful half. A valid IBAN checksum does not mean the account exists; a lapsed LEI passes forever; one in ten random digit strings satisfies Luhn. Schemes with no checksum at all (BIC, IFSC, DOI, and India's PAN, whose algorithm has never been published) are reported as structure-only rather than dressed up as verified. Pass `scheme` or let it infer from shape.
      tags:
      - Edi
      parameters:
      - name: value
        in: query
        required: true
        description: The identifier to check. Spaces, hyphens and dots are ignored.
        schema:
          description: The identifier to check. Spaces, hyphens and dots are ignored.
          type: string
          maxLength: 200
          examples:
          - GB82WEST12345698765432
      - name: scheme
        in: query
        required: false
        description: Which scheme to apply. "auto" infers it from the shape.
        schema:
          description: Which scheme to apply. "auto" infers it from the shape.
          type: string
          enum:
          - auto
          - iban
          - card
          - luhn
          - isbn
          - isbn10
          - isbn13
          - issn
          - isin
          - cusip
          - lei
          - aba
          - imei
          - orcid
          - isni
          - ean8
          - ean13
          - gtin
          - upce
          - vin
          - gstin
          - pan
          - ifsc
          - bic
          - doi
          - verhoeff
          default: auto
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: id_validate_post
      summary: 'Validate an identifier''s checksum: IBAN, card, ISBN, ISSN, ISIN, CUSIP, LEI…'
      description: Runs the real check algorithm for twenty-odd identifier schemes and says both whether it passes and what passing does not prove — which is usually the more useful half. A valid IBAN checksum does not mean the account exists; a lapsed LEI passes forever; one in ten random digit strings satisfies Luhn. Schemes with no checksum at all (BIC, IFSC, DOI, and India's PAN, whose algorithm has never been published) are reported as structure-only rather than dressed up as verified. Pass `scheme` or let it infer from shape.
      tags:
      - Edi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                value:
                  description: The identifier to check. Spaces, hyphens and dots are ignored.
                  type: string
                  maxLength: 200
                  examples:
                  - GB82WEST12345698765432
                scheme:
                  description: Which scheme to apply. "auto" infers it from the shape.
                  type: string
                  enum:
                  - auto
                  - iban
                  - card
                  - luhn
                  - isbn
                  - isbn10
                  - isbn13
                  - issn
                  - isin
                  - cusip
                  - lei
                  - aba
                  - imei
                  - orcid
                  - isni
                  - ean8
                  - ean13
                  - gtin
                  - upce
                  - vin
                  - gstin
                  - pan
                  - ifsc
                  - bic
                  - doi
                  - verhoeff
                  default: auto
              required:
              - value
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.