> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trycherry.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Re-check an outstanding signature with the signing service (write scope)

> Recovers an application whose signature completion never reached Cherry — a dropped callback, an outage, exhausted retries. Cherry asks the signing service what really happened to the outstanding envelope and, only if it is genuinely complete AND belongs to this application, records the signed form and moves the application to `signed`: exactly what the callback would have done. Safe to call repeatedly — an application that is already signed is reported rather than rewritten, and a form still out for signature comes back with `reconciled: false`.



## OpenAPI

````yaml /openapi.json post /ein-applications/{id}/reconcile-signature
openapi: 3.0.3
info:
  title: Cherry API
  version: 1.0.0
  description: >-
    Cherry's public developer API — programmatic access to a business's books as
    Cherry keeps them: bank transactions with their categorizations, the chart
    of accounts, the double-entry journal, financial statements, legal entities,
    the tax-obligation calendar, the fiscal health score, and company
    incorporations (formation, EIN, and state filings).


    Authenticate every request with an API key: `Authorization: Bearer
    ck_live_…`. Keys are created in the Cherry app and are scoped to one
    business (tenant) — there is no tenant id in any URL. Keys carry a `read`
    and/or `write` scope; every GET needs `read`, mutations need `write`.


    Conventions: successful responses wrap the payload in `{ "data": … }`; list
    endpoints add `{ "meta": { "pagination": { limit, offset, nextOffset } } }`
    — pass `nextOffset` back as `offset` until it is null. Errors are `{
    "error": string, "reason"?: string }` with conventional status codes. Dates
    are `YYYY-MM-DD`; money amounts are numbers in the row's currency. Requests
    are rate-limited per key with token buckets (429 + `Retry-After` when
    exhausted); report generation has a smaller budget than plain reads.
servers:
  - url: https://api.trycherry.ai/v1
security:
  - bearerAuth: []
tags:
  - name: Transactions
    description: Bank feed rows and their categorizations.
  - name: Accounts
    description: The tenant's chart of accounts.
  - name: Bank accounts
    description: >-
      Connected bank accounts — Plaid-linked and manual. Manual institutions are
      how developers without a Plaid connection bring their own accounts and
      transactions.
  - name: Bank statements
    description: >-
      Statement uploads — send a statement PDF/image and Cherry transcribes it,
      verifies the balances reconcile, and lands the transactions on a manual
      bank account. The no-export alternative to pushing rows yourself.
  - name: Journal
    description: The double-entry journal (entries and lines).
  - name: Reports
    description: Trial balance and financial statements.
  - name: Entities
    description: Legal entities behind the tenant.
  - name: Obligations
    description: The tax/compliance calendar Cherry tracks.
  - name: Health
    description: Cherry's composite fiscal readiness score.
  - name: Incorporations
    description: >-
      Company formation, EIN orders, and the state filings that follow — start a
      formation and track every filing to completion.
  - name: Meta
    description: The API's own machine-readable contract.
paths:
  /ein-applications/{id}/reconcile-signature:
    post:
      tags:
        - Incorporations
      summary: Re-check an outstanding signature with the signing service (write scope)
      description: >-
        Recovers an application whose signature completion never reached Cherry
        — a dropped callback, an outage, exhausted retries. Cherry asks the
        signing service what really happened to the outstanding envelope and,
        only if it is genuinely complete AND belongs to this application,
        records the signed form and moves the application to `signed`: exactly
        what the callback would have done. Safe to call repeatedly — an
        application that is already signed is reported rather than rewritten,
        and a form still out for signature comes back with `reconciled: false`.
      operationId: reconcileEinApplicationSignature
      parameters:
        - name: id
          in: path
          required: true
          description: >-
            EIN application id, from listEinApplications or the incorporation
            response.
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: What the signing service reported, and whether anything changed
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      application:
                        $ref: '#/components/schemas/EinApplication'
                      reconciled:
                        type: boolean
                        description: >-
                          True only when this call moved the application to
                          `signed`.
                      reason:
                        type: string
                        enum:
                          - signed
                          - already_signed
                          - not_complete
                          - not_advanceable
                        description: >-
                          `not_complete` means the form has not been signed yet
                          — not an error.
                      envelopeStatus:
                        type: string
                        nullable: true
                        description: >-
                          The signing service's own status for the request, when
                          one was read.
                      signedDocumentId:
                        type: string
                        nullable: true
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    EinApplication:
      type: object
      description: >-
        An EIN application Cherry files itself, on paper, for a responsible
        party with no US SSN or ITIN. Created by POST /incorporations when
        `einNoSsn` is set. No tax identifier for the responsible party is ever
        stored on this record — that absence is the reason the record exists.
      properties:
        id:
          type: string
          format: uuid
        entityId:
          type: string
          format: uuid
          nullable: true
          description: >-
            Null until the formation files and a legal entity exists. Cherry
            links it automatically; the issued EIN then propagates onto that
            entity.
        legalName:
          type: string
        entityType:
          type: string
          enum:
            - LLC
            - CORP
        filingState:
          type: string
          description: US state the company was formed in.
        status:
          type: string
          enum:
            - ready_to_file
            - awaiting_signature
            - signed
            - filed
            - ein_received
            - cancelled
          description: >-
            Lifecycle: ready_to_file -> awaiting_signature -> signed -> filed ->
            ein_received. `ready_to_file -> filed` is also legal, for an
            operator who prepares and sends the form without e-signature.
            `cancelled` is terminal.
        ein:
          type: string
          nullable: true
          description: Nine digits, no dash. Present once the IRS has issued it.
        ss4DocumentId:
          type: string
          format: uuid
          nullable: true
        signatureEnvelopeId:
          type: string
          nullable: true
        signedDocumentId:
          type: string
          format: uuid
          nullable: true
        filedAt:
          type: string
          format: date-time
          nullable: true
        receivedAt:
          type: string
          format: date-time
          nullable: true
        signatureRequestedAt:
          type: string
          format: date-time
          nullable: true
        signedAt:
          type: string
          format: date-time
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Stable machine-readable error code.
        reason:
          type: string
          description: Human-readable explanation.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: ck_live_…
      description: >-
        Cherry API key, created in the app. Sent as `Authorization: Bearer
        ck_live_…`.

````