{"openapi":"3.0.0","paths":{"/api/billing/plans":{"get":{"operationId":"PlansController.list","parameters":[],"responses":{"200":{"description":""}},"tags":["Plans"]}},"/v1/tr-validation/iban/validate":{"post":{"description":"Format check + MOD-97 checksum + static payment provider lookup from the bank code. Does not verify account ownership or existence.","operationId":"TrValidationController.validateIban","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateIbanDto"}}}},"responses":{"200":{"description":"Validation result. `valid` reflects format + checksum. `bank` is filled when the institution is known."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Validate a Turkish IBAN","tags":["TR Validation"]}},"/v1/tr-validation/plate/validate":{"post":{"description":"Checks plate structure plus province code against the bundled static dataset. Does not verify active registration, ownership, or vehicle records.","operationId":"TrValidationController.validatePlate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePlateDto"}}}},"responses":{"200":{"description":"Validation result with normalized plate components."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Validate a Turkish vehicle plate","tags":["TR Validation"]}},"/v1/tr-validation/card/validate":{"post":{"description":"Checks scheme ranges and Luhn checksum only. Does not authorize a payment or verify card ownership.","operationId":"TrValidationController.validateCard","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateCardDto"}}}},"responses":{"200":{"description":"Validation result with scheme and masked card hints when valid."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Validate a payment card number structurally","tags":["TR Validation"]}},"/v1/tr-validation/mersis/validate":{"post":{"description":"Checks 16-digit structure and validates the embedded VKN. Does not consult MERSIS or trade registry records.","operationId":"TrValidationController.validateMersis","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateMersisDto"}}}},"responses":{"200":{"description":"Validation result with embedded VKN and serial when available."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Validate a MERSIS number structurally","tags":["TR Validation"]}},"/v1/tr-validation/postal-code/validate":{"post":{"description":"Checks 5-digit postal code structure and cross-checks the first two digits against the bundled province dataset.","operationId":"TrValidationController.validatePostalCode","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePostalCodeDto"}}}},"responses":{"200":{"description":"Validation result with inferred province when the prefix is known."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Validate a Turkish postal code","tags":["TR Validation"]}},"/v1/tr-validation/phone/normalize":{"post":{"description":"Returns E.164 and national format plus a prefix-based `possibleOriginalOperator` hint. The hint is heuristic — number portability is not consulted.","operationId":"TrValidationController.normalizePhone","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NormalizePhoneDto"}}}},"responses":{"200":{"description":"Normalised phone with optional operator hint."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Normalise a Turkish phone number","tags":["TR Validation"]}},"/v1/tr-validation/id/validate":{"post":{"description":"Format and checksum only. Does NOT consult Nüfus, MERSIS, or any official registry.","operationId":"TrValidationController.validateId","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateIdDto"}}}},"responses":{"200":{"description":"Validation result with detected type when 'auto'."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Validate TCKN or VKN format and checksum","tags":["TR Validation"]}},"/v1/tr-validation/locations/provinces":{"get":{"description":"Static dataset: code (plate), name, area code prefixes.","operationId":"TrValidationController.listProvinces","parameters":[],"responses":{"200":{"description":"Array of provinces."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"List all 81 Turkish provinces","tags":["TR Validation"]}},"/v1/tr-validation/locations/districts":{"get":{"description":"Pass either `provinceCode` (plate code, e.g. 06) or `province` (name, e.g. Ankara).","operationId":"TrValidationController.listDistricts","parameters":[{"name":"provinceCode","required":true,"in":"query","schema":{"type":"string"}},{"name":"province","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Array of districts under the requested province."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"List districts in a province","tags":["TR Validation"]}},"/v1/tr-validation/locations/resolve":{"get":{"description":"Tolerates Turkish casing variants and plate codes; returns the matching record.","operationId":"TrValidationController.resolveLocation","parameters":[{"name":"q","required":false,"in":"query","description":"Free-form lookup string. Tries to resolve to a province or district by name or plate code.","schema":{"maxLength":200,"example":"Cankaya","type":"string"}}],"responses":{"200":{"description":"Resolved province/district or null when no match."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Resolve a free-form province/district name","tags":["TR Validation"]}},"/v1/tr-validation/text/normalize":{"post":{"description":"Trims, collapses whitespace, applies title-case heuristics for Turkish.","operationId":"TrValidationController.normalizeText","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NormalizeTextDto"}}}},"responses":{"200":{"description":"Normalised text."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Normalise free-form Turkish text","tags":["TR Validation"]}},"/v1/tr-validation/address/normalize":{"post":{"description":"Best-effort province/district extraction plus text normalisation. Does NOT match UAVT or any official address registry.","operationId":"TrValidationController.normalizeAddress","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NormalizeAddressDto"}}}},"responses":{"200":{"description":"Normalised address with optional province/district hints."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Normalise a free-form Turkish address","tags":["TR Validation"]}},"/v1/tr-validation/bulk/validate":{"post":{"description":"Each item declares its own `type` and value. Useful for clearing a CRM batch in a single request. Capped at 25 items.","operationId":"TrValidationController.bulkValidate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkValidateDto"}}}},"responses":{"200":{"description":"Array of per-item results, in the same order as the input."},"401":{"description":"Missing, invalid, expired, or revoked API key."},"429":{"description":"Per-minute rate limit or monthly quota exceeded."}},"security":[{"ApiDeposuKey":[]}],"summary":"Run multiple validation items in one call","tags":["TR Validation"]}}},"info":{"title":"API Deposu Gateway","description":"Public reference for API Deposu's gateway-fronted products. Endpoints under /v1/<product>/... are protected by an API key issued via the marketplace.","version":"1.0.0","contact":{}},"tags":[{"name":"TR Validation","description":"Turkey-specific format/checksum validation: IBAN, phone, TCKN/VKN, address normalization, and bulk validation."}],"servers":[{"url":"https://api.apideposu.com","description":"Production"}],"components":{"securitySchemes":{"ApiDeposuKey":{"type":"apiKey","in":"header","name":"X-ApiDeposu-Key","description":"Plaintext API key issued from the marketplace. Prefix with 'Bearer ' and pass via Authorization header as an alternative."}},"schemas":{"CreatePortalApiDto":{"type":"object","properties":{}},"PortalCreateRequestBranchDto":{"type":"object","properties":{}},"PortalUpdateRequestActiveDto":{"type":"object","properties":{}},"PortalCreateRequestSessionDto":{"type":"object","properties":{}},"PortalUpdateRequestSessionDto":{"type":"object","properties":{}},"PortalCreateRequestEnvironmentDto":{"type":"object","properties":{}},"PortalUpdateRequestEnvironmentDto":{"type":"object","properties":{}},"PortalInviteMaintainerDto":{"type":"object","properties":{}},"PortalUpdateMaintainerRoleDto":{"type":"object","properties":{}},"UpdateApiMetadataDto":{"type":"object","properties":{}},"PortalUpdateDocsDto":{"type":"object","properties":{}},"PortalUpdateSecurityDto":{"type":"object","properties":{}},"PortalUpdateVisibilityDto":{"type":"object","properties":{}},"PortalCreateDefinitionArtifactDto":{"type":"object","properties":{}},"PortalUpdateReleaseDto":{"type":"object","properties":{}},"CreateApiEndpointDto":{"type":"object","properties":{}},"UpdateApiEndpointDto":{"type":"object","properties":{}},"PortalCreateMcpApiKeyDto":{"type":"object","properties":{}},"ReviewApprovalDto":{"type":"object","properties":{}},"CreateAdminPostDto":{"type":"object","properties":{}},"CreateAdminPostJobDto":{"type":"object","properties":{}},"UpdateAdminPostVariantDto":{"type":"object","properties":{}},"RunAdminPostQaDto":{"type":"object","properties":{}},"CreateSubscriptionDto":{"type":"object","properties":{}},"IssueApiKeyDto":{"type":"object","properties":{}},"ValidateIbanDto":{"type":"object","properties":{"iban":{"type":"string","description":"IBAN to validate. Spaces are tolerated; the value is normalised before format and MOD-97 checksum checks.","example":"TR33 0006 1005 1978 6457 8413 26","minLength":1,"maxLength":80}},"required":["iban"]},"ValidatePlateDto":{"type":"object","properties":{"plate":{"type":"string","description":"Turkish vehicle plate to validate. Common separators are tolerated; the value is normalised before plate structure and province-code checks.","example":"34 A 1234","minLength":1,"maxLength":32}},"required":["plate"]},"ValidateCardDto":{"type":"object","properties":{"cardNumber":{"type":"string","description":"Card number to validate. Spaces and dashes are tolerated; the value is normalised before scheme-range and Luhn checks.","example":"4111 1111 1111 1111","minLength":1,"maxLength":32}},"required":["cardNumber"]},"ValidateMersisDto":{"type":"object","properties":{"mersis":{"type":"string","description":"MERSIS number to validate. Format and embedded VKN only; no official registry lookup is performed.","example":"7340334753000001","minLength":1,"maxLength":32}},"required":["mersis"]},"ValidatePostalCodeDto":{"type":"object","properties":{"postalCode":{"type":"string","description":"Turkish postal code to validate. Uses 5-digit format plus province-prefix cross-check against the bundled static dataset.","example":"34710","minLength":1,"maxLength":16}},"required":["postalCode"]},"NormalizePhoneDto":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number to normalise. Accepts national, international, and free-form input. Returns E.164 plus a prefix-based operator hint.","example":"+90 532 555 1234","minLength":1,"maxLength":80}},"required":["phone"]},"ValidateIdDto":{"type":"object","properties":{"type":{"type":"string","description":"Which checksum to apply. Use 'auto' to detect from value length (11 → tckn, 10 → vkn).","enum":["tckn","vkn","auto"],"example":"tckn"},"value":{"type":"string","description":"ID number to validate. Format and checksum only — no registry lookup.","example":"12345678901","minLength":1,"maxLength":32}},"required":["type","value"]},"NormalizeTextDto":{"type":"object","properties":{"text":{"type":"string","description":"Free-form Turkish text to normalise. Trims, collapses whitespace, applies title-case heuristics.","example":"  ankara büyükşehir   belediyesi  ","maxLength":1000}},"required":["text"]},"NormalizeAddressDto":{"type":"object","properties":{"address":{"type":"string","description":"Free-form Turkish address to normalise. Province/district detection is best-effort.","example":"Atatürk cad. No:12 Çankaya/ANKARA","maxLength":1000}},"required":["address"]},"BulkValidateDto":{"type":"object","properties":{"items":{"type":"array","description":"Array of validation items. Each item carries its own type (\"iban\", \"plate\", \"card\", \"mersis\", \"postal-code\", \"phone\", \"id\", \"text\", \"address\", \"location\") and value. Capped at 25 items per request.","items":{"type":"object","properties":{"type":{"type":"string","enum":["iban","plate","card","mersis","postal-code","phone","id","text","address","location"]},"value":{"description":"Item value, type depends on `type`."},"idType":{"type":"string","enum":["tckn","vkn","auto"],"description":"Required only when type='id'."}},"required":["type"]},"example":[{"type":"iban","value":"TR33 0006 1005 1978 6457 8413 26"},{"type":"plate","value":"34 A 1234"},{"type":"card","value":"4111 1111 1111 1111"},{"type":"mersis","value":"7340334753000001"},{"type":"postal-code","value":"34710"},{"type":"phone","value":"+90 532 555 1234"},{"type":"id","idType":"tckn","value":"12345678901"},{"type":"location","value":"kadikoy/istanbul"}]}},"required":["items"]}}}}