Finmid Incoming Webhook API

The Incoming Webhook API from Finmid — 2 operation(s) for incoming webhook.

Operations 2

POST /api/v1/capital/incoming-webhooks Receive Incoming Webhook #
POST /api/v1/capital/payments/webhooks/payout/outcome Receive Payout Outcome #

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/finmid:finmid-incoming-webhook-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

finmid-incoming-webhook-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CAPITAL Incoming Webhook API
  version: v1.0
servers:
- url: https://sandbox.finmid.com
  description: Sandbox
- url: https://api.finmid.com
  description: Live
security:
- apiKeyScheme: []
tags:
- name: Incoming Webhook
paths:
  /api/v1/capital/incoming-webhooks:
    post:
      tags:
      - Incoming Webhook
      operationId: receive-incoming-webhook
      summary: Receive Incoming Webhook
      description: Endpoint for receiving incoming webhooks with generic data payloads. It acts as an initial integration point for early-stage data adoption. Once a data flow is standardized, it will be implemented as a separate, dedicated endpoint.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - id
              - business_id
              - type
              - data
              properties:
                id:
                  type: string
                  description: Idempotency key for the webhook
                business_id:
                  type: string
                  description: ID of the business this webhook relates to
                type:
                  type: string
                  enum:
                  - business.termination
                  description: Webhook event type
                data:
                  type: object
                  additionalProperties: true
                  description: Generic webhook payload data
            examples:
              business_termination:
                value:
                  id: webhook-123
                  business_id: business-456
                  type: business.termination
                  data:
                    key1: value1
        required: true
      responses:
        '200':
          description: Webhook received successfully.
        '400':
          description: Can't process request due to validation reasons.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/paths/~1api~1v1~1transaction/post/responses/400/content/application~1json/schema/allOf/0'
                - type: object
                  properties:
                    code:
                      type: string
                      enum:
                      - validation_error
                    description:
                      example: Some fields of the request don't match requirements.
              examples:
                validation_error:
                  value:
                    code: validation_error
                    description: Some fields of the request don't match requirements.
        '401':
          $ref: '#/paths/~1api~1v1~1capital~1businesses/post/responses/401'
        '409':
          description: Webhook with this idempotency key already exists.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/paths/~1api~1v1~1transaction/post/responses/400/content/application~1json/schema/allOf/0'
                - type: object
                  properties:
                    code:
                      type: string
                      enum:
                      - incoming_webhook_conflict
                    description:
                      example: Webhook with id 'webhook-123' already processed
              examples:
                conflict:
                  value:
                    code: incoming_webhook_conflict
                    description: Webhook with id 'webhook-123' already processed
        '500':
          $ref: '#/paths/~1api~1v1~1capital~1businesses/post/responses/500'
  /api/v1/capital/payments/webhooks/payout/outcome:
    post:
      tags:
      - Incoming Webhook
      operationId: receive-payout-outcome
      summary: Receive Payout Outcome
      description: '> ⚠️ This webhook is relevant only for platforms that provide their own capital to businesses.


        Webhook endpoint for receiving payout execution outcome from the platform.


        After finmid sends a payout instruction via Execute Payment Transaction, the platform must notify finmid of the outcome by calling this endpoint.


        The platform sends a confirmation with either:

        - **`SETTLED`**: the payment was successfully deposited into the beneficiary''s bank account, including the settlement timestamp.

        - **`FAILED`**: the payment could not be completed, including the failure reason.


        ## Correlation


        The `finmid_idempotency_key` in the request body is the same `idempotency_key` that finmid provided in the original Execute Payment Transaction request. It is used to match this confirmation to the original payout instruction.


        ## Idempotency


        This endpoint is **idempotent on the pair `(finmid_idempotency_key, type)`**.


        Retransmitting the same confirmation (same key, same `type`) any number of times returns **200** and does not cause duplicate processing. Platforms can therefore safely retry on network failures, timeouts, or 5xx responses without special handling.


        A **409 - CONFLICT** is returned only when the platform sends an outcome (`SETTLED` or `FAILED`) that contradicts a terminal state already recorded for that `finmid_idempotency_key` — for example, `SETTLED` after finmid has already marked the payment as `FAILED`, or vice versa. 409 is therefore a **state-conflict signal**, not a duplicate-detection signal: it indicates a real divergence between the platform''s view and finmid''s view of the payment that requires investigation.'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - finmid_idempotency_key
              - business_id
              - type
              properties:
                finmid_idempotency_key:
                  type: string
                  description: 'The `idempotency_key` that finmid sent in the original [Execute Payment Transaction](#tag/Payment/operation/execute-payment-transaction) request.

                    Used to correlate this confirmation with the original payout instruction.

                    '
                  example: op-fund-2026.crd-001.biz-123
                business_id:
                  type: string
                  description: 'The `business_id` that finmid sent in the original [Execute Payment Transaction](#tag/Payment/operation/execute-payment-transaction) request.

                    Echoed back to allow finmid to correlate the confirmation with the business.

                    '
                  example: biz-123
                type:
                  type: string
                  enum:
                  - SETTLED
                  - FAILED
                  description: 'Outcome of the payout execution:

                    - `SETTLED`: the payment was successfully deposited into the beneficiary''s bank account.

                    - `FAILED`: the payment could not be completed.

                    '
                settled_at:
                  type:
                  - string
                  - 'null'
                  format: date-time
                  description: 'Timestamp when the payment was settled (ISO 8601 datetime). Required when `type` is `SETTLED`, null otherwise.

                    '
                  example: '2026-03-10T14:30:00Z'
                failure_reason:
                  type:
                  - string
                  - 'null'
                  description: 'Reason for the failure. Required when `type` is `FAILED`, null otherwise.

                    '
                  example: INSUFFICIENT_FUNDS
            examples:
              payout_settled:
                summary: Payout successfully settled
                value:
                  finmid_idempotency_key: op-fund-2026.crd-001.biz-123
                  business_id: biz-123
                  type: SETTLED
                  settled_at: '2026-03-10T14:30:00Z'
              payout_failed:
                summary: Payout failed
                value:
                  finmid_idempotency_key: op-fund-2026.crd-001.biz-123
                  business_id: biz-123
                  type: FAILED
                  failure_reason: INSUFFICIENT_FUNDS
        required: true
      responses:
        '200':
          description: 'Payout confirmation received successfully. Returned both for the first successful processing

            and for any subsequent retransmission of the same `(finmid_idempotency_key, type)` pair.

            '
        '400':
          $ref: '#/paths/~1api~1v1~1capital~1incoming-webhooks/post/responses/400'
        '401':
          $ref: '#/paths/~1api~1v1~1capital~1businesses/post/responses/401'
        '409':
          description: 'The payout outcome conflicts with the current state of the payment on finmid''s side.

            This happens when the platform sends an outcome (`SETTLED` or `FAILED`) that contradicts

            a terminal state already recorded for the same `finmid_idempotency_key` — for example,

            `SETTLED` for a payment that finmid has already marked as `FAILED` (or vice versa).


            This is **not** a duplicate-detection error: retransmitting the same outcome for the

            same `finmid_idempotency_key` returns 200 (see the Idempotency section of the endpoint).

            '
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/paths/~1api~1v1~1transaction/post/responses/400/content/application~1json/schema/allOf/0'
                - type: object
                  properties:
                    code:
                      type: string
                      enum:
                      - INVALID_STATE_TRANSITION
                    description:
                      example: Payment is in Failed state — cannot apply SETTLED outcome
              examples:
                settled_after_failed:
                  summary: SETTLED received after the payment was already marked as FAILED
                  value:
                    code: INVALID_STATE_TRANSITION
                    description: Payment is in Failed state — cannot apply SETTLED outcome
                failed_after_settled:
                  summary: FAILED received after the payment was already marked as SETTLED
                  value:
                    code: INVALID_STATE_TRANSITION
                    description: Payment is in Settled state — cannot apply FAILED outcome
        '500':
          $ref: '#/paths/~1api~1v1~1capital~1businesses/post/responses/500'
components:
  securitySchemes:
    apiKeyScheme:
      type: apiKey
      in: header
      name: X-API-KEY
x-provenance:
  method: searched
  source: https://docs.finmid.com/reference
  harvested: '2026-10-14'
  tool: harvest-readme-openapi.py
  note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
  assembled_from:
  - https://docs.finmid.com/reference/accept-funding-application.md
  - https://docs.finmid.com/reference/add-business-kyb-data.md
  - https://docs.finmid.com/reference/add-sales-statements.md
  - https://docs.finmid.com/reference/cancel-funding-application.md
  - https://docs.finmid.com/reference/complete-payment.md
  - https://docs.finmid.com/reference/create-business.md
  - https://docs.finmid.com/reference/create-csp-document-upload.md
  - https://docs.finmid.com/reference/create-kyb-business-document-upload.md
  - https://docs.finmid.com/reference/create-signature-link.md
  - https://docs.finmid.com/reference/delete-csp-document.md
  - https://docs.finmid.com/reference/execute-payment-transaction.md
  - https://docs.finmid.com/reference/fail-payment.md
  - https://docs.finmid.com/reference/finalize-csp-document-submission.md
  - https://docs.finmid.com/reference/get-active-offer-group.md
  - https://docs.finmid.com/reference/get-business.md
  - https://docs.finmid.com/reference/get-capital-max.md
  - https://docs.finmid.com/reference/get-current-offer-state.md
  - https://docs.finmid.com/reference/get-document-url.md
  - https://docs.finmid.com/reference/get-funding-applications.md
  - https://docs.finmid.com/reference/get-fundings-for-business.md
  - https://docs.finmid.com/reference/get-latest-onboarding.md
  - https://docs.finmid.com/reference/get-payment-batch.md
  - https://docs.finmid.com/reference/get-payments-for-credit.md
  - https://docs.finmid.com/reference/get-sales-statements.md
  - https://docs.finmid.com/reference/list-csp-documents.md
  - https://docs.finmid.com/reference/list-funding-documents.md
  - https://docs.finmid.com/reference/payout-credit.md
  - https://docs.finmid.com/reference/receive-incoming-webhook.md
  - https://docs.finmid.com/reference/receive-payout-outcome.md
  - https://docs.finmid.com/reference/reject-credit.md
  - https://docs.finmid.com/reference/reject-funding-application.md
  - https://docs.finmid.com/reference/report-funds-collection.md
  - https://docs.finmid.com/reference/report-payment.md
  - https://docs.finmid.com/reference/report-platform-check.md
  - https://docs.finmid.com/reference/schedule-payment.md
  - https://docs.finmid.com/reference/simulate-accept-offers.md
  - https://docs.finmid.com/reference/simulate-batch-payment.md
  - https://docs.finmid.com/reference/simulate-capital-max-review.md
  - https://docs.finmid.com/reference/simulate-create-funding.md
  - https://docs.finmid.com/reference/simulate-create-offers.md
  - https://docs.finmid.com/reference/simulate-expire-offers.md
  - https://docs.finmid.com/reference/submit-business-performance-data.md
  - https://docs.finmid.com/reference/update-business-non-pi.md
  merge:
    pages: 43
    deduped: 199
    conflicts_kept_first: 0