Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions openapi/SOURCE.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"verification.json": {
"url": "https://docs.didit.me/openapi-25.json",
"sha256": "12b2fdb05572755d61b93791f6964b7d883ba7b20f7ea9b31543903b6edab8a9",
"fetched_at": "2026-10-29T06:37:04Z"
"sha256": "2b6a8ac2afb6a215bc1b51b72c1de355cc96c724f910ac195ae40cfd0e94a8a2",
"fetched_at": "2026-11-04T06:32:59Z"
},
"account.json": {
"url": "https://docs.didit.me/openapi-auth.json",
"sha256": "ae1b5e07df822fe93cae27a9eaa0790948069352c9d98c87eecf7efd644c92cb",
"fetched_at": "2026-10-29T06:37:04Z"
"sha256": "5b45b1896ef3107dd9a601c76d9ba35761bae5f04ac731b6c27876603903bf05",
"fetched_at": "2026-11-04T06:32:59Z"
},
"webhook-vectors.json": {
"generator": "product-automations scripts/server-sdks/make_vectors.py (seeded 2026-10-17)",
Expand Down
295 changes: 272 additions & 23 deletions openapi/account.json

Large diffs are not rendered by default.

31,572 changes: 25,049 additions & 6,523 deletions openapi/verification.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public WithRawResponse withRawResponse() {
*
* <p><b>Authentication.</b> Send your application's API key in <code>x-api-key</code>. Missing or invalid credentials return <code>403</code> - this API never returns <code>401</code>.
*
* <p><b>Rate limit.</b> Shared write budget of 300 requests per minute per API key across all POST/PATCH/DELETE endpoints.
* <p><b>Rate limit.</b> Shared write budget of 300 requests per minute per API key across POST/PATCH/DELETE endpoints (transaction creates and event ingestion have a separate budget of 600).
*
* <p>{@code POST /v3/address-validation/}
*
Expand Down
179 changes: 179 additions & 0 deletions src/main/java/me/didit/resources/AnalyticsResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import me.didit.core.Responses;
import me.didit.types.AnalyticsRetrieveParams;
import me.didit.types.AnalyticsRetrieveResponse;
import me.didit.types.AnalyticsRetrieveTodayParams;
import me.didit.types.ApplicationAnalyticsToday;

/** The {@code analytics} resource: {@code client.analytics()}. */
public final class AnalyticsResource {
Expand Down Expand Up @@ -120,6 +122,93 @@ public CompletableFuture<AnalyticsRetrieveResponse> retrieveAsync() {
return client.executeAsync(retrieveRequest(AnalyticsRetrieveParams.builder().build()), RequestOptions.none(), RETRIEVE_RESPONSE).thenApply(RawResponse::data);
}

/**
* Get today's verifications by hour
*
* <p>Today's user verification (KYC) sessions, from local midnight in <code>tz</code>, counted per local hour they were created in, next to the same hours of the same weekday one week before, and split by the outcome each one holds now: approved, in review or declined. This is the volume card of the Business Console's Home.
*
* <p><code>total</code> is today so far. <code>previous_total_so_far</code> counts the comparison day only up to the same local time, so a change between them compares the same part of both days. The hours still to come today are <code>0</code>. A day on which the clocks change has 23 or 25 hours: the missing hour stays <code>0</code> and the repeated hour holds both.
*
* <p>{@code GET /v3/organization/{organization_id}/application/{application_id}/analytics/today/}
* <p>Application scoped: the organization and application ids come from the client options.
*
* @param params the request parameters
* @param options per-request options that override the client options
* @return the response body
*/
public ApplicationAnalyticsToday retrieveToday(AnalyticsRetrieveTodayParams params, RequestOptions options) {
return client.execute(retrieveTodayRequest(params), options, RETRIEVE_TODAY_RESPONSE).data();
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}.
*
* @param params the request parameters
* @param options per-request options
* @return a future completed with the result
*/
public CompletableFuture<ApplicationAnalyticsToday> retrieveTodayAsync(AnalyticsRetrieveTodayParams params, RequestOptions options) {
return client.executeAsync(retrieveTodayRequest(params), options, RETRIEVE_TODAY_RESPONSE).thenApply(RawResponse::data);
}

/**
* Same as {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}, with the client's options.
*
* @param params the request parameters
* @return the result
*/
public ApplicationAnalyticsToday retrieveToday(AnalyticsRetrieveTodayParams params) {
return client.execute(retrieveTodayRequest(params), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE).data();
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}, with the client's options.
*
* @param params the request parameters
* @return a future completed with the result
*/
public CompletableFuture<ApplicationAnalyticsToday> retrieveTodayAsync(AnalyticsRetrieveTodayParams params) {
return client.executeAsync(retrieveTodayRequest(params), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE).thenApply(RawResponse::data);
}

/**
* Same as {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}, without parameters.
*
* @param options per-request options
* @return the result
*/
public ApplicationAnalyticsToday retrieveToday(RequestOptions options) {
return client.execute(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), options, RETRIEVE_TODAY_RESPONSE).data();
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}, without parameters.
*
* @param options per-request options
* @return a future completed with the result
*/
public CompletableFuture<ApplicationAnalyticsToday> retrieveTodayAsync(RequestOptions options) {
return client.executeAsync(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), options, RETRIEVE_TODAY_RESPONSE).thenApply(RawResponse::data);
}

/**
* Same as {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}, without parameters, with the client's options.
*
* @return the result
*/
public ApplicationAnalyticsToday retrieveToday() {
return client.execute(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE).data();
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)}, without parameters, with the client's options.
*
* @return a future completed with the result
*/
public CompletableFuture<ApplicationAnalyticsToday> retrieveTodayAsync() {
return client.executeAsync(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE).thenApply(RawResponse::data);
}

private static final ResponseHandler<AnalyticsRetrieveResponse> RETRIEVE_RESPONSE = Responses.json(Conv.union(AnalyticsRetrieveResponse::fromJson));

private static ApiRequest retrieveRequest(AnalyticsRetrieveParams params) {
Expand All @@ -130,6 +219,16 @@ private static ApiRequest retrieveRequest(AnalyticsRetrieveParams params) {
.build();
}

private static final ResponseHandler<ApplicationAnalyticsToday> RETRIEVE_TODAY_RESPONSE = Responses.json(Conv.model(ApplicationAnalyticsToday::fromJson));

private static ApiRequest retrieveTodayRequest(AnalyticsRetrieveTodayParams params) {
return ApiRequest.builder("GET", "/v3/organization/{organization_id}/application/{application_id}/analytics/today/")
.applicationScoped()
.params(params)
.queryFields("tz")
.build();
}

/** The {@code analytics} operations returning {@link RawResponse}. */
public static final class WithRawResponse {
private final ApiClient client;
Expand Down Expand Up @@ -217,5 +316,85 @@ public RawResponse<AnalyticsRetrieveResponse> retrieve() {
public CompletableFuture<RawResponse<AnalyticsRetrieveResponse>> retrieveAsync() {
return client.executeAsync(retrieveRequest(AnalyticsRetrieveParams.builder().build()), RequestOptions.none(), RETRIEVE_RESPONSE);
}

/**
* {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response.
*
* @param params the request parameters
* @param options per-request options
* @return the result
*/
public RawResponse<ApplicationAnalyticsToday> retrieveToday(AnalyticsRetrieveTodayParams params, RequestOptions options) {
return client.execute(retrieveTodayRequest(params), options, RETRIEVE_TODAY_RESPONSE);
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response.
*
* @param params the request parameters
* @param options per-request options
* @return a future completed with the result
*/
public CompletableFuture<RawResponse<ApplicationAnalyticsToday>> retrieveTodayAsync(AnalyticsRetrieveTodayParams params, RequestOptions options) {
return client.executeAsync(retrieveTodayRequest(params), options, RETRIEVE_TODAY_RESPONSE);
}

/**
* {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response, with the client's options.
*
* @param params the request parameters
* @return the result
*/
public RawResponse<ApplicationAnalyticsToday> retrieveToday(AnalyticsRetrieveTodayParams params) {
return client.execute(retrieveTodayRequest(params), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE);
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response, with the client's options.
*
* @param params the request parameters
* @return a future completed with the result
*/
public CompletableFuture<RawResponse<ApplicationAnalyticsToday>> retrieveTodayAsync(AnalyticsRetrieveTodayParams params) {
return client.executeAsync(retrieveTodayRequest(params), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE);
}

/**
* {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response, without parameters.
*
* @param options per-request options
* @return the result
*/
public RawResponse<ApplicationAnalyticsToday> retrieveToday(RequestOptions options) {
return client.execute(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), options, RETRIEVE_TODAY_RESPONSE);
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response, without parameters.
*
* @param options per-request options
* @return a future completed with the result
*/
public CompletableFuture<RawResponse<ApplicationAnalyticsToday>> retrieveTodayAsync(RequestOptions options) {
return client.executeAsync(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), options, RETRIEVE_TODAY_RESPONSE);
}

/**
* {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response, without parameters, with the client's options.
*
* @return the result
*/
public RawResponse<ApplicationAnalyticsToday> retrieveToday() {
return client.execute(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE);
}

/**
* Asynchronous {@link #retrieveToday(AnalyticsRetrieveTodayParams, RequestOptions)} with the raw response, without parameters, with the client's options.
*
* @return a future completed with the result
*/
public CompletableFuture<RawResponse<ApplicationAnalyticsToday>> retrieveTodayAsync() {
return client.executeAsync(retrieveTodayRequest(AnalyticsRetrieveTodayParams.builder().build()), RequestOptions.none(), RETRIEVE_TODAY_RESPONSE);
}
}
}
4 changes: 3 additions & 1 deletion src/main/java/me/didit/resources/BankResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public WithRawResponse withRawResponse() {
/**
* Check a bank account
*
* <p><b>Not available in production yet.</b> Bank Verification is switched off in production, so until it is switched on this endpoint answers <code>404</code> with <code>bank_verification_not_available</code>. Do not build on it yet. The rest of this description is what the endpoint does once it is available.
*
* <p>Check that a bank account belongs to the person or company you name, before you send money to it. No session and no sign-in: send the name and the account, read the result. It is the [account check](/core-technology/bank-verification/account-check) of the Bank Verification step, run from your backend.
*
* <p><b>What you send.</b> The account's <code>country</code> (ISO 3166-1 alpha-3), the <code>account</code> the way that country writes it, and the <code>holder</code> name: <code>full_name</code> for a person or <code>business_name</code> for a company. A business name checks a business account.
Expand All @@ -44,7 +46,7 @@ public WithRawResponse withRawResponse() {
*
* <p><b>Every request is a new check.</b> There is no idempotency key and no endpoint to read a check back, so a retried request runs, and is billed, again. Store the response.
*
* <p><b>Sandbox.</b> A sandbox key calls no bank and is charged nothing. The last 4 characters of the IBAN, else of the account number, choose the answer: <code>0001</code> a <code>close_match</code> with a <code>holder_name</code>, <code>0002</code> a <code>close_match</code> without one, <code>0003</code> and <code>0006</code> a <code>no_match</code>, <code>0004</code> <code>cannot_verify</code>, <code>0005</code> a <code>503</code> and <code>0009</code> a <code>400</code>. Any other ending is a <code>match</code>.
* <p><b>Sandbox.</b> Where Bank Verification is available, a sandbox key calls no bank and is charged nothing. The last 4 characters of the IBAN, else of the account number, choose the answer: <code>0001</code> a <code>close_match</code> with a <code>holder_name</code>, <code>0002</code> a <code>close_match</code> without one, <code>0003</code> and <code>0006</code> a <code>no_match</code>, <code>0004</code> <code>cannot_verify</code>, <code>0005</code> a <code>503</code> and <code>0009</code> a <code>400</code>. Any other ending is a <code>match</code>.
*
* <p><b>API keys.</b> A scoped API key needs write access to sessions.
*
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/me/didit/resources/EmailResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public WithRawResponse withRawResponse() {
*
* <p><b>Authentication.</b> Send your application's API key in <code>x-api-key</code>. Missing or invalid credentials return <code>403</code> - this API never returns <code>401</code>.
*
* <p><b>Rate limit.</b> Shared write budget of 300 requests per minute per API key across all POST/PATCH/DELETE endpoints.
* <p><b>Rate limit.</b> Shared write budget of 300 requests per minute per API key across POST/PATCH/DELETE endpoints (transaction creates and event ingestion have a separate budget of 600).
*
* <p><b>Social footprint.</b> Set <code>enable_social</code> to <code>true</code> to add a <code>email_social</code> block: the online platforms this address is registered on, with per-category counts and any profile details available. <code>profiles_registered: 0</code> means the platforms were checked and the address was found on none of them - a valid, billable answer. The block is absent when the add-on was not requested or the check could not be completed, and it is not billed in that case. Billing adds one <code>email_social</code> unit per request on top of this endpoint's own price.
*
Expand Down
Loading
Loading