Fiatside

Developers

API 문서

사이트와 동일한 수수료 내역을 줄 단위로 반환하며 숨은 마진이 없는 API입니다. 이 페이지는 모든 엔드포인트가 공유하는 규칙을 설명하고 오늘 현재 공개된 사항을 정확히 명시합니다.

오늘 공개된 사항

1 엔드포인트는 실제로 노출되어 호출 가능합니다: 견적(quoting)입니다. 나머지 5는 계약으로 게시되므로 오픈 전에 구축할 수 있으며, 각각 명시적인 배지가 표시됩니다.

통합에 도움이 되므로 사전에 문서화합니다. 연결되어 있다고 믿게 하는 것은 도움이 되지 않습니다: 모든 엔드포인트는 상태를 명시하며, 오픈 엔드포인트의 샘플 응답은 실제로 얻은 응답이지 목업이 아닙니다.

01

기본 URL 및 버전 관리

두 가지 기본 URL이 공존합니다: 오늘 응답하는 것과 발급된 키와 함께 제공될 버전 관리 API입니다.

현재
/api Live
버전 관리 API
/api/v1 Published contract, not open

버전은 헤더가 아닌 경로에 있습니다. URL은 티켓에 붙여넣어도 유지되어야 합니다. 호환되지 않는 변경(필드 제거, 유형 변경, 의미 변경)은 새 버전을 열며, 이전 버전은 최소 6개월 동안 계속 제공되고 종료 날짜는 변경 로그에 공지됩니다. 필드 추가는 호환되지 않는 변경이 아닙니다: 클라이언트는 알 수 없는 필드를 무시해야 합니다.

02

규칙

이 규칙은 오픈되었거나 예정된 모든 엔드포인트에 적용됩니다. 대부분은 한 가지 이유로 존재합니다: 전송 중에 1센트도 잃지 않기 위해서입니다.

금액은 문자열 또는 소수 단위의 정수입니다

절대 부동 소수점이 아닙니다. JSON에서 0.1 + 0.2는 0.3이 아니며, 큰 금액은 직렬화 시 소수 단위를 잃습니다. 따라서 주요 단위 금액은 문자열로 전송되고 내부 금액은 소수 자릿수가 포함된 소수 단위의 정수로 전송됩니다.

{
  "net": "912.28",
  "currency": "EUR",
  "currencyDecimals": 2
}

소수 자릿수는 통화에 따라 다릅니다

유로는 소수 2자리, CFA 프랑과 베트남 동은 소수 자리가 없습니다. "× 100"을 하드코딩하지 마십시오: currencyDecimals 또는 참조 데이터의 decimals 필드를 읽으십시오.

{ "amount": "125000", "currency": "XOF", "currencyDecimals": 0 }

암호화폐 금액은 기본 단위입니다

입금은 소수 자릿수와 함께 반환됩니다: 비트코인은 8, USDT는 6, 이더는 18입니다. 동일한 티커가 네트워크에 따라 다른 소수 자릿수를 가질 수 있습니다: 기억에 의존하지 말고 필드를 신뢰하십시오.

{ "deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 } }

타임스탬프

날짜는 ISO 8601 UTC입니다. 의도적인 예외 하나: rateAsOf는 밀리초 단위의 Unix 타임스탬프입니다. 표시가 아닌 경과 시간 계산에 사용되기 때문입니다. 이는 요청 시점이 아닌 시장 데이터의 날짜를 나타냅니다: 이 구분 덕분에 오래된 가격을 감지할 수 있습니다.

{ "rateAsOf": 1788356981608, "rateSource": "coingecko" }

식별자는 안정적입니다

자산, 결제 수단 또는 국가 식별자는 변경되지 않으며 재할당되지 않습니다. 폐쇄된 결제 수단은 단계와 사유와 함께 자체 식별자를 유지합니다: 통합 시 옵션에서 사라진 이유를 확인할 수 있으며, 구멍을 발견하지 않습니다.

사용자 대상 메시지는 이중 언어입니다

거부 사유는 동일한 객체에 프랑스어와 영어로 반환됩니다. 사용자에게 맞는 언어를 표시하면 되며, 번역 테이블을 유지할 필요가 없습니다.

{ "reason": { "fr": "…", "en": "…" } }
03

첫 번째 호출

견적에는 키가 필요 없습니다. 이 호출은 그대로 작동합니다.

요청bash
curl -sS -X POST https://fiatside.com/api/quote \
  -H 'Content-Type: application/json' \
  -d '{
    "assetId": "usdt",
    "railId": "sepa_instant",
    "networkId": "tron",
    "direction": "sell",
    "amount": "1000"
  }'
응답 — 실제 예json
{
  "deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 },
  "gross": "921.68",
  "net": "912.28",
  "currency": "EUR",
  "currencyDecimals": 2,
  "midRate": "0.92168430",
  "effectiveRate": "0.91228000",
  "totalCostBps": 102,
  "lines": [
    { "code": "network", "amount": "1.11", "basis": "Cout reseau tron, preleve en USDT" },
    { "code": "spread",  "amount": "8.29", "basis": "0.90 % du montant converti" }
  ],
  "settlement": { "p50Minutes": 1, "p95Minutes": 12 },
  "lockSeconds": 1800,
  "rateAsOf": 1788356981608,
  "rateSource": "mock",
  "limitError": null
}

rateSource 필드는 가격 출처를 나타냅니다. "mock" 값은 결정적 개발 소스로, 프로덕션에서는 부팅할 수 없습니다: 프로세스는 고정된 가격을 견적하는 대신 시작을 거부합니다.

04

섹션

05

API가 수행하지 않는 작업

API의 한계는 기능만큼 알아두면 유용합니다.

  • 제3자 지급은 없습니다. 수취인 이름은 주문 보유자의 확인된 신원과 일치해야 하며, 결제 수단은 이제 이름과 계좌를 대조합니다.
  • API를 통한 계정 생성이나 신원 확인은 없습니다. 이러한 단계는 사용자가 수락하는 내용을 확인하는 흐름에서 이루어집니다.
  • URL 매개변수에 키가 없습니다. URL은 로그, 리퍼러 헤더 및 기록에 남습니다: 해당 방식으로 전달된 키는 폐기해야 할 키입니다.
  • 당사 측 견적 캐싱은 없습니다. 응답에는 Cache-Control: no-store가 포함되며, 통합은 이를 우회해서는 안 됩니다: 캐시된 견적은 확정으로 제시되는 오래된 가격입니다.
  • 암호화폐 구매 엔드포인트는 없습니다. 서비스는 디지털 자산에서 법정 화폐로 한 방향으로만 운영됩니다.