API Guide

Human-readable reference for Auth and Customer-Context APIs.

YCMT EU Partner Developer API Guide

Authentication API + Customer-Context Core API | v1.0

FieldValue
Document60_YCMT_EU_PartnerDev_API_Guide_v1_0.docx
AudiencePartner application developers, partner technical leads, partner QA teams
ScopeYCMT EU customer-facing API integration
Versionv1.0
StatusDraft for partner onboarding use
API familiesAuthentication API and Customer-Context Core API
ExcludesInternal YCMT systems, internal identifiers, internal decision logic, internal databases, and internal gateway implementation

1. Purpose and reading rules

This guide is the main human-readable API reference for partner developers integrating a branded application with the YCMT EU customer-facing API surface. It explains what to call, when to call it, which headers to send, what key request and response fields mean, and how endpoints work together.

This document is intentionally partner-facing. It does not describe YCMT internal architecture or internal compliance decisioning. Partner applications call the documented API and display YCMT-provided statuses, instructions, and remediation signals to the customer.

1.1 Partner-safe integration principle

Your application presents the branded customer experience. YCMT validates the customer, partner, KYC, sanctions, transaction, and settlement controls before any regulated action proceeds. The partner application must not create shortcuts around registration, authentication, KYC, quote acceptance, transfer confirmation, funding, cancellation, or status tracking.

1.2 How to use this guide

  1. Read the common request rules before implementing any endpoint.
  2. Implement Authentication API endpoints first: registration, login, refresh, logout, password reset, and device registration.
  3. Implement Customer-Context Core API endpoints next: profile, KYC, beneficiaries, quotes, disclosures, transfers, cancellation, and status polling.
  4. Use the Flows Guide to validate end-to-end customer journeys.
  5. Use the Errors, Statuses, and Retry Guide for edge cases and resilience.
  6. Use the OpenAPI and Postman pack for machine-readable schemas and executable examples.

2. API families

API familyBase pathPurposeTypical caller
Authentication API/v1/authCustomer registration, login, token refresh, logout, password reset, identifier management, and device registrationPartner application acting for the customer
Customer-Context Core API/v1/coreProfile, KYC session, beneficiaries, quotes, disclosures, transfers, funding, cancellation, and transfer statusPartner application acting for the authenticated customer
Partner backend surfacesSeparate documentsQuote signing, webhook receipt, reporting, operational integration where applicablePartner backend

2.1 Environment base URLs

EnvironmentTypical base URLUse
Sandboxhttps://sandbox.api.eu.yescash.exampleDevelopment, QA, and conformance testing
ProductionProvided during production activationLive customer traffic after YCMT approval

The sandbox URL above is a placeholder format. YCMT onboarding will provide the actual URL and access credentials. Never mix sandbox and production credentials.

3. Common request rules

3.1 Required headers

HeaderRequired whenDescription
Content-Type: application/jsonRequest has a JSON bodySend JSON request bodies unless the endpoint states otherwise.
Accept: application/jsonAll API callsRequest JSON responses.
X-Correlation-IdAll API callsPartner-generated UUID used to trace a request chain with YCMT support.
Ocp-Apim-Subscription-KeyAll partner application API callsPartner API key issued during onboarding. Treat as a secret.
Authorization: Bearer <accessToken>Customer-authenticated endpointsCustomer access token returned by the Authentication API.
Idempotency-KeyIdempotent write endpointsUUID generated per business action. Reuse only when retrying the exact same action.

3.2 Example unauthenticated request

POST /v1/auth/start HTTP/1.1
Host: sandbox.api.eu.yescash.example
Content-Type: application/json
Accept: application/json
X-Correlation-Id: 2c3eb391-57e1-4312-a59d-85f9df38cf62
Ocp-Apim-Subscription-Key: <sandbox-api-key>
{
"identifierType": "email",
"identifier": "alice.martinez@example.com"
}

3.3 Example authenticated request

GET /v1/core/profile HTTP/1.1
Host: sandbox.api.eu.yescash.example
Accept: application/json
Authorization: Bearer <customer-access-token>
X-Correlation-Id: 2c3eb391-57e1-4312-a59d-85f9df38cf62
Ocp-Apim-Subscription-Key: <sandbox-api-key>

3.4 Security rules for partner developers

  • Do not log access tokens, refresh tokens, OTPs, passwords, private keys, device signing material, full identity documents, or full payment details.
  • Store tokens only in secure platform storage appropriate to the channel and device type.
  • Use TLS for all calls and reject invalid certificates.
  • Use correlation IDs in logs so YCMT can investigate without exposing secrets.
  • Show customer-facing remediation only from documented statuses, errors, and response fields.
  • Do not infer internal reasons for KYC, sanctions, customer status, or transfer decisions.

4. Authentication API

The Authentication API is used before or alongside customer-context actions. It returns customer tokens, manages customer login identifiers, supports password reset, and registers the customer device used for higher-assurance transfer confirmation.

4.1 Authentication endpoint catalogue

EndpointMethodPurposeAuth required
/v1/auth/startPOSTStart two-step login using email or phone.No
/v1/auth/loginPOSTComplete login and receive tokens, or continue MFA challenge/enrolment when required.No
/v1/auth/refreshPOSTRefresh the customer access token.No, uses refresh token in body
/v1/auth/logoutPOSTTerminate the current customer session.Access token + refresh token
/v1/auth/register/startPOSTStart customer registration.No
/v1/auth/register/verify-otpPOSTVerify registration OTP.No
/v1/auth/register/set-passwordPOSTComplete registration and receive tokens.No
/v1/auth/identifiersGETList customer login identifiers.Yes
/v1/auth/identifiers/add/startPOSTStart adding a new email or phone.Yes
/v1/auth/identifiers/add/verify-otpPOSTComplete identifier addition.Yes
/v1/auth/identifiers/{identifierId}/remove/startPOSTStart removing an existing identifier.Yes
/v1/auth/identifiers/{identifierId}/remove/verify-otpPOSTComplete identifier removal.Yes
/v1/auth/password/forgotPOSTStart password reset.No
/v1/auth/password/resetPOSTComplete password reset.No
/v1/auth/device-registration/startPOSTStart device registration.Yes
/v1/auth/device-registration/completePOSTComplete device registration with proof of device key possession.Yes

4.2 Login

POST /v1/auth/start

Starts login using the customer identifier. The response returns a short-lived loginAttemptId used by /v1/auth/login.

Request fieldRequiredMeaning
identifierTypeYesemail or phone.
identifierYesCustomer email address or E.164 phone number.
{
"identifierType": "email",
"identifier": "alice.martinez@example.com"
}

POST /v1/auth/login

Completes login. Most successful responses return tokens and subscriptionId. Some responses may require MFA challenge or MFA enrolment; the partner app must follow the returned authStatus and next instructions.

Request fieldRequiredMeaning
loginAttemptIdYesValue returned by /v1/auth/start.
passwordNormally yesCustomer password for the normal login path.
mfaChallengeId / mfaCodeConditionalUsed only if the previous response requires MFA challenge completion.
mfaEnrolmentSessionId / mfaEnrolmentCodeConditionalUsed only if the previous response requires MFA enrolment.

Successful token response fields

FieldMeaning
accessTokenBearer token used on customer-authenticated /v1/core calls.
refreshTokenToken used to obtain a new access token. Store securely.
tokenTypeBearer.
expiresInAccess token lifetime in seconds.
subscriptionIdPartner-facing customer reference for this partner relationship.
customerStatusCurrent customer status visible to the partner application.

4.3 Token refresh and logout

EndpointRequestResponse / resultImplementation note
/v1/auth/refreshrefreshTokenNew token bundle.Call before access token expiry or after receiving token-expired handling guidance.
/v1/auth/logoutrefreshToken plus current access tokenSession termination result.After success, delete local access and refresh tokens.

4.4 Customer registration

Registration is a three-step customer-facing flow: start, verify OTP, then set password. A successful final step returns tokens and the partner-facing subscriptionId.

StepEndpointPartner app action
1POST /v1/auth/register/startCollect email or phone and start registration.
2POST /v1/auth/register/verify-otpPrompt customer for OTP and verify it.
3POST /v1/auth/register/set-passwordCollect password and complete registration. Store tokens securely.

4.5 Identifier management

Authenticated customers may list, add, and remove login identifiers. Identifier add and remove use two-step OTP flows. The partner app must present masked identifiers and avoid exposing full values except where the customer entered them.

CapabilityEndpoints
List identifiersGET /v1/auth/identifiers
Add identifierPOST /v1/auth/identifiers/add/start then POST /v1/auth/identifiers/add/verify-otp
Remove identifierPOST /v1/auth/identifiers/{identifierId}/remove/start then POST /v1/auth/identifiers/{identifierId}/remove/verify-otp

4.6 Password reset

StepEndpointPartner app action
1POST /v1/auth/password/forgotCollect identifier and start reset. Display neutral response.
2POST /v1/auth/password/resetCollect OTP and new password. On success, ask customer to log in again or continue as instructed.

4.7 Device registration

Device registration prepares the customer device for high-assurance transfer confirmation. The partner app starts registration, generates or selects a customer-device signing key according to the Security and Signing Guide, and completes registration by submitting the public key and proof. Private key material must never leave the customer device.

EndpointPurposeKey fields
/v1/auth/device-registration/startReturns a deviceRegistrationId and registrationChallenge.deviceMetadata, stepUpToken when required
/v1/auth/device-registration/completeRegisters the device public key and proof.deviceRegistrationId, publicKey, registrationProof

5. Customer-Context Core API

Every Core API endpoint requires a customer access token in the Authorization header. The partner application must treat the token as the sole customer context for the request and must not place internal customer identifiers in URLs or request bodies.

5.1 Core endpoint catalogue

EndpointMethodPurpose
/v1/core/profilePOSTSubmit customer profile information.
/v1/core/profileGETRead customer profile, customer status, KYC status, identifiers, and subscriptionId.
/v1/core/kyc-sessionsPOSTStart a YCMT-served KYC capture session.
/v1/core/kyc-sessions/{kycSessionId}GETRead KYC session state.
/v1/core/beneficiariesGETList customer beneficiaries.
/v1/core/beneficiariesPOSTCreate a beneficiary.
/v1/core/beneficiaries/{beneficiaryId}GETRead beneficiary details.
/v1/core/beneficiaries/{beneficiaryId}/archivePOSTArchive a beneficiary.
/v1/core/quotesPOSTCreate a quote for a selected beneficiary.
/v1/core/quotes/{quoteId}GETFetch quote details.
/v1/core/quotes/{quoteId}/disclosureGETFetch required disclosure for the quote.
/v1/core/quotes/{quoteId}/acceptPOSTAccept quote and receive transferId.
/v1/core/transfers/{transferId}/submitPOSTSubmit transfer details.
/v1/core/transfers/{transferId}/confirmPOSTConfirm transfer using device assertion.
/v1/core/transfers/{transferId}/cancelPOSTRequest cancellation where allowed.
/v1/core/transfers/{transferId}GETRead transfer detail and next-step fields.
/v1/core/transfersGETList transfers.

5.2 Profile

POST /v1/core/profile

Submits customer identity attributes required before KYC and money movement. The partner app should collect only the fields required by the current UI and corridor requirements, and submit them in the documented format.

Request fieldRequiredMeaning
firstNameYesCustomer first name.
lastNameYesCustomer last name.
dateOfBirthYesDate in YYYY-MM-DD format.
nationalityYesISO country code as specified in onboarding materials.
residenceCountryYesCountry of residence.
residenceAddressYesStructured address object.
middleNames, gender, placeOfBirthOptionalProvide where collected or required by the customer journey.

GET /v1/core/profile

Reads the partner-visible customer state. This is the main endpoint for the partner app to decide which customer screen to show next.

Response fieldMeaning
subscriptionIdPartner-facing customer reference. Safe for partner-side logging and joining.
statusCustomer status visible to the partner app.
kycStatusCurrent KYC state.
transactabilityConvenience boolean indicating whether the customer can proceed with money-moving actions, subject to endpoint-specific rules.
customerActionExpectedWhether the app should prompt the customer for action.
profileSubmitted profile details.
identifiersMasked or summarized login identifiers.

5.3 KYC sessions and KYC webview

KYC capture is performed through a YCMT-served webview. The partner app opens the webviewUrl returned by /v1/core/kyc-sessions and polls the KYC session endpoint for state.

EndpointPurposeMain response fields
POST /v1/core/kyc-sessionsStart KYC capture session.kycSessionId, webviewUrl, expiresAt, closureCallback
GET /v1/core/kyc-sessions/{kycSessionId}Read KYC session state.sessionState, openedAt, closedAt, expiresAt
  • Open the webviewUrl in the customer-facing app using the approved webview integration pattern.
  • Do not intercept or modify documents, liveness capture, or verification data inside the webview.
  • After the webview closes, poll the KYC session state and then refresh /v1/core/profile to show the correct next step.
  • Use documented remediation messages only; do not infer internal KYC reasons.

5.4 Beneficiaries

Beneficiaries are customer-created recipients. A beneficiary may require screening before it can be used in a transfer.

EndpointPurposeKey fields
GET /v1/core/beneficiariesList beneficiaries.items, nextCursor
POST /v1/core/beneficiariesCreate beneficiary.firstName, lastName, dateOfBirth, address, nationality, countryOfResidence, relationshipToCustomer
GET /v1/core/beneficiaries/{beneficiaryId}Read beneficiary detail.beneficiaryId, state, payout methods, identity fields
POST /v1/core/beneficiaries/{beneficiaryId}/archiveArchive beneficiary.beneficiaryId, state, archivedAt

5.5 Quotes and disclosure

The quote and disclosure sequence must be implemented carefully. The customer must see the required disclosure before quote acceptance. Expired quotes must not be accepted; the app should create or fetch a new quote as instructed by the error response.

EndpointPurposeMain fields
POST /v1/core/quotesCreate quote for a selected beneficiary.originAmount, originCurrency, destinationCurrency, beneficiaryId
GET /v1/core/quotes/{quoteId}Fetch quote detail.amounts, currencies, fxRate, fees, totalCustomerCost, quoteValidUntil
GET /v1/core/quotes/{quoteId}/disclosureFetch customer disclosure.disclosureToken, disclosureText, issuedAt, expiresAt
POST /v1/core/quotes/{quoteId}/acceptAccept quote after disclosure.disclosureToken, purposeOfTransfer

Quote response fields to display

FieldDisplay / handling guidance
originAmount and originCurrencyAmount the customer sends.
destinationAmount and destinationCurrencyAmount expected to be received.
fxRateExchange rate used for this quote.
principalFee and partnerFeeFees where required by the customer-facing flow.
totalCustomerCostTotal cost to the customer.
quoteValidUntilCountdown or expiry handling.
quoteIdUse for subsequent quote fetch, disclosure, and acceptance calls.

5.6 Transfers

Transfers proceed through quote acceptance, transfer submission, transfer confirmation, funding, and status tracking. The partner app must follow nextStep and transferStatus fields rather than assuming a fixed timing.

EndpointPurposeKey request / response fields
POST /v1/core/transfers/{transferId}/submitSubmit transfer details after quote acceptance.beneficiaryId, payoutMethod, purposeOfTransfer; returns submittedAt, nextStep
GET /v1/core/transfers/{transferId}Read transfer detail and next action.transferStatus, nextStep, confirmationChallenge, fundingSession, cancellation, refund
POST /v1/core/transfers/{transferId}/confirmConfirm transfer using device assertion.deviceAssertion; returns fundingSession and nextStep
POST /v1/core/transfers/{transferId}/cancelRequest cancellation where allowed.cancellationReason; returns cancellationOutcome and refund fields if applicable
GET /v1/core/transfersList customer transfers.items, nextCursor

5.7 Funding webview

A successful transfer confirmation may return a fundingSession containing a fundingWebviewUrl. The partner app opens that URL for the customer. YCMT controls the funding flow. The partner app is a display host and must not collect or store payment credentials unless a separate written instruction explicitly allows it.

Funding fieldMeaning
fundingSessionIdIdentifier for the funding session.
fundingWebviewUrlURL to open for the customer.
expiresAtTime after which the funding session is no longer valid.

6. Statuses the partner app must handle

6.1 Customer statuses

StatusPartner app handling
PENDINGPrompt customer to complete onboarding/profile/KYC steps. Money-moving actions are not available yet.
VALIDAllow normal customer journey subject to beneficiary, quote, transfer, and payment rules.
MONITOREDAllow customer journey where endpoint permits it, but show that transfers may be under review when status responses indicate this.
RESTRICTEDPrompt customer action when the response says customer action is expected. Do not promise release until YCMT validates remediation.
BLOCKEDDo not allow money-moving actions. Show generic support guidance.
CLOSEDDo not allow money-moving actions. Show generic account-closed/support guidance.

6.2 Transfer handling principle

Always drive the UI from transferStatus, nextStep, customerActionExpected, confirmationChallenge fields, fundingSession fields, cancellation fields, and refund fields returned by the API. Do not hard-code transfer progress based only on elapsed time.

7. Common response and error model

Successful responses return the resource or action result described by the endpoint. Error responses use a structured error object. The partner app should map error codes to the documented handling rules in the Errors, Statuses, and Retry Guide.

7.1 Generic error response shape

{
"error": {
"code": "quote.expired",
"message": "The quote is no longer valid.",
"correlationId": "2c3eb391-57e1-4312-a59d-85f9df38cf62",
"hint": "hint.partner_app.refresh_quote",
"remediation": "remediation.customer_ux.review_new_quote"
}
}

7.2 Partner app error handling rules

  • Do not display raw technical error details to customers unless the guide explicitly marks them customer-safe.
  • Show the customer-safe remediation associated with the error category.
  • For token expiry, refresh the token and retry where safe.
  • For quote expiry, request a new quote and show the customer the new price/disclosure before acceptance.
  • For validation errors, highlight the field or step the customer can correct.
  • For customer.statusBlocking, show generic support guidance and do not disclose internal reasons.
  • For rate limits or temporary unavailability, follow Retry-After if provided and avoid retry storms.

8. Idempotency, pagination, and retries

8.1 Idempotency

For write operations that create or change business state, use an Idempotency-Key generated per business action. Reuse the same key only when retrying the same action after timeout or network failure. Do not reuse one key for different customer actions.

Action typeIdempotency guidance
Registration, login, password reset sub-stepsFollow endpoint-specific rules in the Openapi-assets/Postman pack.
Profile submission, KYC session creation, beneficiary creation, quote acceptance, transfer submit/confirm/cancelUse Idempotency-Key where specified by the contract.
GET requestsDo not send Idempotency-Key unless specifically instructed.

8.2 Pagination

List endpoints may return nextCursor. When nextCursor is present, call the same list endpoint again with the cursor parameter. Do not construct or modify cursor values; treat them as opaque strings.

8.3 Safe retry rules

SituationPartner app action
Network timeout before responseRetry with the same Idempotency-Key for idempotent write operations.
HTTP 429 rate limitWait according to Retry-After if present, then retry.
HTTP 5xx temporary failureRetry with backoff where customer experience allows.
Validation errorDo not retry automatically; prompt customer or fix request.
Quote expiredCreate or fetch a new quote and show the updated disclosure before acceptance.

9. Minimal implementation checklist

AreaMust be implemented before go-live
Headers and credentialsBase URL, API key, correlation IDs, Authorization header, secure token handling.
AuthenticationRegistration, login, refresh, logout, password reset, identifier handling where in scope.
Profile and KYCProfile submit/read, KYC webview launch, KYC state polling and remediation.
BeneficiariesCreate/list/read/archive and beneficiary state handling.
Quotes and disclosureQuote create/fetch, disclosure fetch/display, quote acceptance, quote expiry handling.
TransfersSubmit, read status, confirm, funding webview, cancellation, refund/status handling.
Security and signingDevice registration and confirmation; quote signing/webhooks where applicable.
Errors and retryStructured error handling, idempotency, pagination, rate-limit handling.
Sandbox evidencePositive and negative test scenarios completed and submitted to YCMT.

10. What not to build

The partner application must not implement any workaround that bypasses YCMT controls or changes the regulatory responsibility split.

  • Do not create or execute transfers outside the documented customer-context APIs.
  • Do not treat partner backend credentials as authority to move customer money.
  • Do not store or expose internal customer identifiers. Use subscriptionId only where the API returns it.
  • Do not infer or disclose internal AML, KYC, sanctions, fraud, or customer-status reasons.
  • Do not collect or store payment credentials outside the approved funding flow.
  • Do not alter or suppress YCMT-required disclosures.
  • Do not reuse one customer token for another customer or another partner channel.
  • Do not hard-code assumptions about transfer timing, KYC outcomes, or cancellation outcomes.

11. Support and escalation

NeedContact route
Sandbox access issueYCMT technical onboarding contact
API contract questionYCMT partner integration support
Unexpected production API errorProduction support route with correlation ID, timestamp, endpoint, and sanitized request summary
Security incidentYCMT security incident contact immediately
Customer complaint or regulated issuePartner operations escalation route, not developer support

Appendix A. Endpoint summary by build order

Build orderEndpoints
1. Health and connectivityUse onboarding-provided health endpoint where enabled.
2. Registration/login/auth/register/start, /auth/register/verify-otp, /auth/register/set-password, /auth/start, /auth/login
3. Token lifecycle/auth/refresh, /auth/logout
4. Profile/KYC/core/profile, /core/kyc-sessions, /core/kyc-sessions/{kycSessionId}
5. Device registration/auth/device-registration/start, /auth/device-registration/complete
6. Beneficiaries/core/beneficiaries, /core/beneficiaries/{beneficiaryId}, /core/beneficiaries/{beneficiaryId}/archive
7. Quote/disclosure/core/quotes, /core/quotes/{quoteId}, /core/quotes/{quoteId}/disclosure, /core/quotes/{quoteId}/accept
8. Transfers/core/transfers/{transferId}/submit, /core/transfers/{transferId}/confirm, /core/transfers/{transferId}, /core/transfers, /core/transfers/{transferId}/cancel