---
title: "Reconcile local state with Apple"
method: POST
path: "/appsec/7.0/apple/certificates/reconcile"
tags: ["Certificates"]
---

# Reconcile local state with Apple

`POST /appsec/7.0/apple/certificates/reconcile`

## Request

- Base URL: `https://cloud.codenameone.com`
- URL: `https://cloud.codenameone.com/appsec/7.0/apple/certificates/reconcile`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/codenameone/apis/codename-one-apple-signing-service/docs/appsec/7.0/apple/certificates/reconcile/post.ts> (a function with typed inputs; its response is checked against the schema)

Marks locally-known certificates Apple no longer lists as REVOKED and imports certificates Apple has that we don't (metadata only, no private key).

## Response `200`

Certificates after reconciliation

- CertDTO[]
  - `id` integer
  - `appleCertId` string, nullable: Apple's /v1/certificates resource id.
  - `certificateType` string
  - `displayName` string, nullable
  - `serialNumber` string, nullable
  - `expiresAt` integer, nullable: Expiry in epoch millis (from the X.509 notAfter).
  - `status` 'ACTIVE' | 'REVOKED' | 'EXPIRED'
  - `privateKeyPresent` boolean: True if we hold the private key (a .p12 can be downloaded); false for imported/reconciled certs.

## Other responses

- `403`: Caller is anonymous / not authenticated.
- `409`: The account's App Store Connect API key is missing, was rejected by Apple (revoked, or the Key ID / Issuer ID do not match the .p8), or lacks the access this call needs. The developer has to fix the stored key -- retrying will not clear it. The body is a plain-text explanation written for them.
- `422`: The stored key is fine but Apple refused this particular request (for example "You already have a current Distribution certificate"). The body is a plain-text explanation, carrying Apple's own wording where Apple supplied it.
- `429`: Apple is rate-limiting App Store Connect requests for this team. Retrying after a pause is correct.
- `502`: App Store Connect is down or unreachable, so the call could not be completed. This is the only genuinely upstream failure and the only one worth retrying automatically; anything the developer must act on comes back as 409 or 422 instead.

## Changes

- **2026-08-19** `f0b48d0af96f`: 2 info
  - added the non-success response with the status `422`
  - added the non-success response with the status `429`

[Operation history](https://skmtc.dev/codenameone/apis/codename-one-apple-signing-service/changes/appsec/7.0/apple/certificates/reconcile/post.md)

---

[API](https://skmtc.dev/codenameone/apis/codename-one-apple-signing-service.md) - [All operations](https://skmtc.dev/codenameone/apis/codename-one-apple-signing-service/llms.txt) - [OpenAPI document](https://skmtc.dev/codenameone/apis/codename-one-apple-signing-service/revisions/f0b48d0af96f?raw)
