infinihash-com Periodic Review API

The Periodic Review API from infinihash-com — 5 operation(s) for periodic review.

Operations 11

POST /kyc/{submissionId}/review-schedule Create or reset a review schedule #
GET /kyc/{submissionId}/review-schedule Get a submission's review schedule #
PATCH /kyc/{submissionId}/review-schedule Complete a review and roll the schedule forward #
GET /kyc/{submissionId}/re-kyc Preview a re-KYC (prior submission pre-fill) #
POST /kyc/{submissionId}/re-kyc Start a re-KYC cycle #
POST /review-schedule/{submissionId}/review-schedule Create or reset a review schedule #
GET /review-schedule/{submissionId}/review-schedule Get a submission's review schedule #
PATCH /review-schedule/{submissionId}/review-schedule Complete a review and roll the schedule forward #
GET /review-schedule List review schedules #
GET /review-schedule/{submissionId}/re-kyc Preview a re-KYC (prior submission pre-fill) #
POST /review-schedule/{submissionId}/re-kyc Start a re-KYC cycle #

Specifications

Schemas & Data

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/infinihash-com:infinihash-com-periodic-review-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

infinihash-com-periodic-review-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Infinihash KYC Periodic Review API
  version: 1.0.0
  description: 'Identity verification, KYB, sanctions screening, UBO orchestration and periodic review.


    Auth: send your key as `X-API-Key: ` (or `Authorization: Bearer `).


    Most endpoints are mounted twice — at the root (`/kyc/...`) and under `/api` (`/api/kyc/...`). Prefer the `/api` form; it is what the hosted portals and SDKs use.


    Python SDK: `pip install "git+https://github.com/Infinihash/kyc-python@v0.1.0"` (https://github.com/Infinihash/kyc-python; runnable examples in examples/).'
  contact:
    name: Infinihash
    url: https://kyc.infinihash.com
servers:
- url: https://kyc-api.infinihash.com
  description: Production
tags:
- name: Periodic Review
paths:
  /kyc/{submissionId}/review-schedule:
    post:
      x-route-source:
        file: routes/rekyc.js
        method: post
        path: /:submissionId/review-schedule
      summary: Create or reset a review schedule
      description: 'Creates (or resets, via upsert) the periodic-review schedule for a submission. The interval comes from the submission''s risk tier: low 365 days, medium 180, high 90, critical 30. Status is set to `scheduled`; lastReviewDate and notes are cleared. Also reachable at /review-schedule/{submissionId}/review-schedule.'
      tags:
      - Periodic Review
      operationId: createReviewSchedule
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '201':
          description: Schedule created or reset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycReviewSchedule'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    get:
      x-route-source:
        file: routes/rekyc.js
        method: get
        path: /:submissionId/review-schedule
      summary: Get a submission's review schedule
      description: Returns the review schedule for a submission owned by the caller. 404 if the submission does not exist or has no schedule. Also reachable at /review-schedule/{submissionId}/review-schedule.
      tags:
      - Periodic Review
      operationId: getReviewSchedule
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: The schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycReviewSchedule'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found, or no review schedule found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    patch:
      x-route-source:
        file: routes/rekyc.js
        method: patch
        path: /:submissionId/review-schedule
      summary: Complete a review and roll the schedule forward
      description: Marks the active `scheduled` review completed (lastReviewDate = now, notes recorded) and then immediately schedules the next cycle by upserting the same row back to `scheduled` with a new nextReviewDate from the risk tier. The returned row is the rolled-forward schedule (so its `notes` is null; the notes are applied to the completed cycle only). Also reachable at /review-schedule/{submissionId}/review-schedule.
      tags:
      - Periodic Review
      operationId: completeReviewSchedule
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RekycCompleteRequest'
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: The rolled-forward schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycReviewSchedule'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /kyc/{submissionId}/re-kyc:
    get:
      x-route-source:
        file: routes/rekyc.js
        method: get
        path: /:submissionId/re-kyc
      summary: Preview a re-KYC (prior submission pre-fill)
      description: 'Returns the prior submission pre-filled for its next cycle: entity details, parsed metadata, prior status/score/summary, its documents with age and a refresh flag (older than 12 months must be re-collected), and the current review schedule. Read-only. Also reachable at /review-schedule/{submissionId}/re-kyc.'
      tags:
      - Periodic Review
      operationId: getReKyc
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: Pre-fill payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycPrefill'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      x-route-source:
        file: routes/rekyc.js
        method: post
        path: /:submissionId/re-kyc
      summary: Start a re-KYC cycle
      description: Creates a fresh `pending` submission linked to the prior one (metadata.parentSubmissionId), inheriting entity type, name, tier and metadata unless overridden in the body. The prior submission is set to `superseded` and its open review schedule is retired. Checks are seeded as in a normal submission; run them via the returned _links.run. Also reachable at /review-schedule/{submissionId}/re-kyc.
      tags:
      - Periodic Review
      operationId: startReKyc
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RekycStartRequest'
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '201':
          description: New submission created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycStarted'
        '400':
          description: entityType not a valid entity type, or riskTier not low|medium|high
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /review-schedule/{submissionId}/review-schedule:
    post:
      x-route-source:
        file: routes/rekyc.js
        method: post
        path: /:submissionId/review-schedule
      summary: Create or reset a review schedule
      description: 'Creates (or resets, via upsert) the periodic-review schedule for a submission. The interval comes from the submission''s risk tier: low 365 days, medium 180, high 90, critical 30. Status is set to `scheduled`; lastReviewDate and notes are cleared. Also reachable at /review-schedule/{submissionId}/review-schedule.'
      tags:
      - Periodic Review
      operationId: post_review_schedule_submissionId_review_schedule
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '201':
          description: Schedule created or reset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycReviewSchedule'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    get:
      x-route-source:
        file: routes/rekyc.js
        method: get
        path: /:submissionId/review-schedule
      summary: Get a submission's review schedule
      description: Returns the review schedule for a submission owned by the caller. 404 if the submission does not exist or has no schedule. Also reachable at /review-schedule/{submissionId}/review-schedule.
      tags:
      - Periodic Review
      operationId: get_review_schedule_submissionId_review_schedule
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: The schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycReviewSchedule'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found, or no review schedule found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    patch:
      x-route-source:
        file: routes/rekyc.js
        method: patch
        path: /:submissionId/review-schedule
      summary: Complete a review and roll the schedule forward
      description: Marks the active `scheduled` review completed (lastReviewDate = now, notes recorded) and then immediately schedules the next cycle by upserting the same row back to `scheduled` with a new nextReviewDate from the risk tier. The returned row is the rolled-forward schedule (so its `notes` is null; the notes are applied to the completed cycle only). Also reachable at /review-schedule/{submissionId}/review-schedule.
      tags:
      - Periodic Review
      operationId: patch_review_schedule_submissionId_review_schedule
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RekycCompleteRequest'
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: The rolled-forward schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycReviewSchedule'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /review-schedule:
    get:
      x-route-source:
        file: routes/rekyc.js
        method: get
        path: /
      summary: List review schedules
      description: Lists this API key's review schedules ordered by nextReviewDate ascending, each with `daysUntilReview` (negative when overdue).
      tags:
      - Periodic Review
      operationId: listReviewSchedules
      parameters:
      - name: overdue
        in: query
        required: false
        description: Pass `true` to return only schedules whose nextReviewDate is now or in the past. Any other value is ignored.
        schema:
          type: string
          enum:
          - 'true'
      - name: status
        in: query
        required: false
        description: Filter by schedule status (scheduled, completed, superseded).
        schema:
          type: string
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: Array of schedules
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RekycReviewScheduleListItem'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /review-schedule/{submissionId}/re-kyc:
    get:
      x-route-source:
        file: routes/rekyc.js
        method: get
        path: /:submissionId/re-kyc
      summary: Preview a re-KYC (prior submission pre-fill)
      description: 'Returns the prior submission pre-filled for its next cycle: entity details, parsed metadata, prior status/score/summary, its documents with age and a refresh flag (older than 12 months must be re-collected), and the current review schedule. Read-only. Also reachable at /review-schedule/{submissionId}/re-kyc.'
      tags:
      - Periodic Review
      operationId: get_review_schedule_submissionId_re_kyc
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: Pre-fill payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycPrefill'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      x-route-source:
        file: routes/rekyc.js
        method: post
        path: /:submissionId/re-kyc
      summary: Start a re-KYC cycle
      description: Creates a fresh `pending` submission linked to the prior one (metadata.parentSubmissionId), inheriting entity type, name, tier and metadata unless overridden in the body. The prior submission is set to `superseded` and its open review schedule is retired. Checks are seeded as in a normal submission; run them via the returned _links.run. Also reachable at /review-schedule/{submissionId}/re-kyc.
      tags:
      - Periodic Review
      operationId: post_review_schedule_submissionId_re_kyc
      parameters:
      - name: submissionId
        in: path
        required: true
        schema:
          type: string
        description: KYC submission id
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RekycStartRequest'
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '201':
          description: New submission created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RekycStarted'
        '400':
          description: entityType not a valid entity type, or riskTier not low|medium|high
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited (global per-IP limit)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    RekycPrefill:
      type: object
      description: The prior submission, pre-filled for the next review cycle.
      required:
      - parentSubmissionId
      - prefill
      - documents
      - documentsRequiringRefresh
      - instructions
      properties:
        parentSubmissionId:
          type: string
        prefill:
          type: object
          properties:
            entityType:
              type: string
            entityName:
              type: string
            riskTier:
              type: string
            metadata:
              type: object
              additionalProperties: true
              description: Parsed prior submission metadata (free-form).
        priorSummary:
          type:
          - object
          - 'null'
          additionalProperties: true
          description: Parsed prior final summary (free-form); null if absent or unparseable.
        priorStatus:
          type: string
        priorRiskScore:
          type:
          - integer
          - 'null'
        priorCompletedAt:
          type:
          - string
          - 'null'
          format: date-time
        documents:
          type: array
          items:
            $ref: '#/components/schemas/RekycDocument'
        documentsRequiringRefresh:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              docType:
                type: string
              ageDays:
                type:
                - integer
                - 'null'
        reviewSchedule:
          allOf:
          - $ref: '#/components/schemas/RekycReviewSchedule'
        instructions:
          type: string
    RekycCompleteRequest:
      type: object
      properties:
        notes:
          type: string
          description: Reviewer notes recorded against the completed cycle.
    RekycStarted:
      type: object
      required:
      - id
      - parentSubmissionId
      - entityType
      - entityName
      - riskTier
      - status
      - metadata
      - submission
      - _links
      properties:
        id:
          type: string
          description: The NEW submission id.
        parentSubmissionId:
          type: string
        entityType:
          type: string
        entityName:
          type: string
        riskTier:
          type: string
        status:
          type: string
          enum:
          - pending
        metadata:
          type: object
          additionalProperties: true
          description: Merged metadata including parentSubmissionId, reKycTriggeredAt, reKycReason, requestedRiskTier.
        submission:
          type: object
          additionalProperties: true
          description: The created KycSubmission row (metadata is a JSON string).
          properties:
            id:
              type: string
            apiKeyId:
              type: string
            entityType:
              type: string
            riskTier:
              type: string
            entityName:
              type: string
            metadata:
              type:
              - string
              - 'null'
            status:
              type: string
            createdAt:
              type: string
              format: date-time
        _links:
          type: object
          properties:
            run:
              type: string
            status:
              type: string
            documents:
              type: string
    RekycReviewScheduleListItem:
      allOf:
      - $ref: '#/components/schemas/RekycReviewSchedule'
      - type: object
        properties:
          daysUntilReview:
            type:
            - integer
            - 'null'
            description: Rounded days until nextReviewDate; negative when overdue.
    RekycStartRequest:
      type: object
      description: Optional overrides for the new cycle; anything omitted is inherited from the prior submission.
      properties:
        entityType:
          type: string
          enum:
          - individual
          - listed_public
          - wholly_owned_sub
          - pension_erisa
          - governmental
          - nonprofit
          - trust
          - spv
          - complex
          - private_corp
        entityName:
          type: string
        riskTier:
          type: string
          enum:
          - low
          - medium
          - high
          description: Defaults to the prior tier (or low).
        metadata:
          type: object
          additionalProperties: true
          description: Merged over the prior metadata (free-form).
        reason:
          type: string
          description: Why the re-KYC was triggered; stored as reKycReason (default "Periodic review").
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
    RekycReviewSchedule:
      type: object
      required:
      - id
      - submissionId
      - apiKeyId
      - riskTier
      - reviewFrequencyDays
      - nextReviewDate
      - status
      - createdAt
      description: Periodic-review schedule for a submission (one row per submission).
      properties:
        id:
          type: string
        submissionId:
          type: string
        apiKeyId:
          type: string
        riskTier:
          type: string
          description: Submission risk tier at scheduling time (default low).
        reviewFrequencyDays:
          type: integer
          description: 'Review interval derived from the tier: low 365, medium 180, high 90, critical 30 (unknown tiers 365).'
        nextReviewDate:
          type: string
          format: date-time
        lastReviewDate:
          type:
          - string
          - 'null'
          format: date-time
        status:
          type: string
          description: scheduled | completed | superseded.
        notes:
          type:
          - string
          - 'null'
        createdAt:
          type: string
          format: date-time
    RekycDocument:
      type: object
      required:
      - id
      - docType
      - provider
      - createdAt
      - ageDays
      - requiresRefresh
      properties:
        id:
          type: string
        docType:
          type: string
        provider:
          type:
          - string
          - 'null'
        createdAt:
          type: string
          format: date-time
        ageDays:
          type:
          - integer
          - 'null'
        requiresRefresh:
          type: boolean
          description: true when the document is older than 12 months.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
    BearerAuth:
      type: http
      scheme: bearer