Skip to main content

API overview

Base URLs

Base URL
https://api.finomesh.com/api/v1

All requests and responses are JSON (Content-Type: application/json). Merchant endpoints require the X-Api-Key header.

Endpoints at a glance

Method & pathAuthPurpose
POST /paymentsAPI keyCreate a payment
POST /payments/{id}/verifyAPI keyVerify a payment's outcome
POST /payments/{id}/inquiryAPI keySubmit a transaction inquiry
GET /merchant/settlements/balancesAPI key + signatureCashout: available balance per asset
POST /merchant/settlementsAPI key + signatureCashout: request a settlement
GET /merchant/settlements/{id}API key + signatureCashout: settlement status

The core API-key surface is deliberately small: your server creates payments and verifies their outcomes — the verify response carries everything you need about a payment. Transaction inquiry is a support escalation on top of that pair, for the rare payment a customer paid but that never resolved. Browsing and searching payments happens in the merchant dashboard, not over the API. For driving a test payment through its outcomes, see Sandbox Overview.

The cashout endpoints let your server withdraw your available balance programmatically. They are off by default — Finomesh enables the cashout API for your gateway on request — and additionally hardened: every request carries an HMAC signature and must come from an allowlisted IP. See the Cashout / Settlements guide.

Response envelope

Every response uses one of two envelopes.

Success — HTTP 2xx:

{
"success": true,
"data": { }
}
FieldTypeNullableDescriptionExample
successbooleanNoAlways true on a 2xx response.true
dataobjectNoThe endpoint's result payload. Its shape depends on the endpoint — see the field table on each reference page.{ … }

Error — HTTP 4xx/5xx:

{
"success": false,
"error": {
"code": "validation_error",
"message": "Key: 'CreatePaymentRequest.CallbackURL' Error:Field validation for 'CallbackURL' failed on the 'required' tag"
}
}
FieldTypeNullableDescriptionExample
successbooleanNoAlways false on an error response.false
errorobjectNoError detail. Present only on failures.{ … }
error.codestring (enum)NoStable machine-readable slug from the error-code table — branch on this.validation_error
error.messagestringNoHuman-readable description. May change between releases — never branch on it."…"

error.code is a stable machine-readable slug — branch on it, not on message (which is human-readable and may change).

Error codes

The common codes shared across endpoints — with a How to fix for each — are on the Error Codes page. Endpoint-specific errors are listed on each reference page; cashout has its own Cashout Errors.

Rate limiting

Every endpoint is rate limited per source IP, per endpoint; exceeding the limit returns 429 with a Retry-After header. See Rate Limits for how to handle it.

Conventions

  • Money is always a string. Every monetary field ("amount": "49.99") is a decimal string with up to 18 decimal places. Parse with a decimal library — never a float.
  • Timestamps are RFC 3339 / ISO-8601 UTC strings ("2026-06-12T10:21:43Z").
  • IDs are UUIDs.