# ApiKeyDetailDto

A model the API reference uses in a request or a response. The operation pages link every field typed as this model here.

Read-only projection of an API key for the per-key detail surface.

## Fields
- `id` (string(uuid))
- `name` (string): Gets or sets the display name of the API key. (nullable)
- `active` (boolean): Gets or sets a value indicating whether the API key is marked active.  An inactive key is rejected at authentication regardless of its expiry.
- `expireAt` (string(date-time)): Gets or sets the expiration date for the API key. Null indicates the key does not expire. (nullable)
- `userId` (string(uuid)): Gets or sets the user ID that owns this API key.
- `keyPrefix` (string): Gets or sets the leading characters of the key value, safe to display. `null` for a key  minted before hashed storage that the rewrap has not reached. (nullable)
- `last4` (string): Gets or sets the trailing characters of the key value, safe to display. `null` for a key  the rewrap has not reached. (nullable)
- `environment` ([ApiKeyEnvironment](https://devportal.demo.winkpg.io/docs/api/models/ApiKeyEnvironment.md)): Gets or sets which world the key acts in, or `null` when it has never been stamped. (nullable)
  Values:
  - `Test`: The key acts against the processor's test host. No live money moves. Minted with the sk_test_ prefix.
  - `Live`: The key acts against the processor's live host. Minted with the sk_live_ prefix.
- `status` ([ApiKeyStatus](https://devportal.demo.winkpg.io/docs/api/models/ApiKeyStatus.md)): Gets or sets the key's administrative state. Resolved at the projection boundary, so a key  that predates the field arrives as `Active` rather than unset.
  Values:
  - `Active`: The key is in service. Whether it is currently accepted also depends on its expiry.
  - `Revoked`: The key has been revoked and is rejected at authentication for good. Revoked keys are retained rather than deleted so the audit trail of what the key did survives it.
  - `Suspended`: The key has been put out of service temporarily, pending someone deciding whether the use that triggered it was legitimate. Rejected at authentication exactly as a revoked key is, and reinstatable, which is the whole reason it is not one.
- `revokedAt` (string(date-time)): Gets or sets when the key was revoked, or `null` if it has not been. (nullable)
- `revokedBy` (string(uuid)): Gets or sets who revoked the key, or `null` if it has not been revoked. (nullable)
- `revocationReason` (string): Gets or sets the reason recorded at revocation, when one was given. (nullable)
- `suspendedAt` (string(date-time)): Gets or sets when the key was suspended, or `null` when it is not suspended. (nullable)
- `suspendedBy` (string(uuid)): Gets or sets who suspended the key, or `null` when the platform did or the key is not  suspended. Read alongside `suspensionReason`, which says which of the two a null  means. (nullable)
- `suspensionReason` (string): Gets or sets why the key was suspended, when it is. (nullable)
- `anomalySourceAction` ([ApiKeyAnomalyAction](https://devportal.demo.winkpg.io/docs/api/models/ApiKeyAnomalyAction.md)): Gets or sets this key's own action for an anomalous source, or `null` when it follows  the merchant default. (nullable)
  Values:
  - `LogOnly`: Write the detection to the security log and the metrics and do nothing else. The default, and what a deployment should stay on until its own traffic has been looked at.
  - `Notify`: Log it and tell the key's owner. The key keeps working: the person who can tell a new office from a stolen credential is the one holding it, so this asks them rather than deciding.
  - `Suspend`: Log it, tell the owner, and put the key into Suspended so it stops authenticating until somebody reinstates it. Containment ahead of confirmation, which is the right trade only for a merchant that has decided a stalled integration costs less than a credential in the wrong hands.
- `merchantId` (string(uuid)): Gets or sets the merchant this key was minted for, or `null` when it is not tied to one. (nullable)
- `replacesKeyId` (string(uuid)): Gets or sets the key this one was minted to replace, or `null` when it was not created  by a rotation. (nullable)
- `replacedByKeyId` (string(uuid)): Gets or sets the key minted to replace this one, or `null` when it has not been rotated. (nullable)
- `overlapExpiresAt` (string(date-time)): Gets or sets when this key's rotation overlap closes and it stops authenticating, or  `null` when it is not in one. Retained after the key is revoked, because the lineage is  history. (nullable)
- `isRevoked` (boolean): Gets a value indicating whether the key has been revoked. (read only)
- `isSuspended` (boolean): Gets a value indicating whether the key is suspended, which is reversible, as opposed to  revoked, which is not. (read only)
- `isInRotationOverlap` (boolean): Gets a value indicating whether this key is currently inside a rotation overlap: rotated,  still in service, and not yet past the window. (read only)
- `hasRotationLineage` (boolean): Gets a value indicating whether this key was minted as a replacement for an earlier one, or  has itself been replaced. Either makes it part of a rotation chain worth showing. (read only)
- `creationTime` (string(date-time)): Gets or sets the UTC time the key was created.
- `lastModificationTime` (string(date-time)): Gets or sets the UTC time the key record was last modified, when it has been modified. (nullable)
- `lastUsedAt` (string(date-time)): Gets or sets the UTC time the key was last used to authenticate a request, or `null`  when it has no recorded use. Covers every kind of API activity, not just transactions. (nullable)
- `recentSourceIps` (array<[ApiKeySourceIpDto](https://devportal.demo.winkpg.io/docs/api/models/ApiKeySourceIpDto.md)>): Gets or sets the addresses the key has recently authenticated from, most recently seen  first. Empty when none have been recorded. (nullable)
  Fields of each item:
  - `address` (string): Gets or sets the address, as the request pipeline resolved it. (nullable)
  - `firstSeenAt` (string(date-time)): Gets or sets the UTC time this address was first recorded for the key.
  - `lastSeenAt` (string(date-time)): Gets or sets the UTC time this address was most recently recorded for the key.
- `allowedCidrs` (array<string>): Gets or sets the source addresses this key is permitted to authenticate from, as CIDR ranges  or bare addresses. Empty means the key is not bound to any and may be used from anywhere. (nullable)
- `isAddressRestricted` (boolean): Gets a value indicating whether the key is bound to a set of source addresses. (read only)
- `scopes` (array<string>): Gets or sets the capability scopes this key is restricted to. Empty means the key is  unrestricted and may reach everything its owning account can. (nullable)
- `isScopeRestricted` (boolean): Gets a value indicating whether the key is restricted to a set of capability scopes. (read only)
- `isExpired` (boolean): Gets a value indicating whether the key's expiry has already passed.  A key with no expiry never reports as expired. (read only)
- `hasRotationOverlapLapsed` (boolean): Gets a value indicating whether the key's rotation overlap has closed, so it is refused at  authentication even while its stored status still reads active. (read only)
- `isUsable` (boolean): Gets a value indicating whether the key would currently be accepted at authentication:  in service, marked active, not past its expiry, and not past a rotation overlap. (read only)

## See also

- [All documentation](https://devportal.demo.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
