Skip to content

CreditNote.SentToContact still marked readOnly: true despite PR #616 intending to make it writable (and the live API already accepting it) #826

Description

@syl222

The SentToContact field on the CreditNote schema in xero_accounting.yaml is still marked "readOnly: true", even though:

  1. A merged PR (#616, "INVINP-13442 | Credit notes now have SentToContact as writeable", Aug 26 2024) was explicitly intended to make this field writable, linked to the internal "modernized credit notes" work (Jira INVINP-13442).
  2. The live Accounting API already accepts "SentToContact" on both Create Credit Notes and Update Credit Note — confirmed directly via the API Explorer on an approved credit note.

Looking at the diff for #616, it only updated the field's "description" text (to match "Invoice.SentToContact"'s wording) and added "SentToContact": true to a couple of JSON examples. It never removed the "readOnly: true" line from the schema itself:

yaml

SentToContact:
  description: Boolean to set whether the credit note in the Xero app should be marked
    as "sent". This can be set only on credit notes that have been approved
  readOnly: true
  type: boolean

For comparison, Invoice.SentToContact has the same description pattern but no readOnly flag, and is correctly writable.

This looks like the schema update in #616 was incomplete — the description text was fixed, but the readOnly: true flag was accidentally left in place.

Impact
Because readOnly: true drives code generation for the official SDKs, this has propagated a stale restriction into generated clients ever since — e.g. in Xero-NetStandard, CreditNote.SentToContact has a private setter in every version from at least v13.0.0 through the current v17.0.0, meaning consumers of the .NET SDK cannot set this field on a CreditNote object at all, despite the underlying REST API supporting it. This forces workarounds (reflection to bypass the private setter, or hand-rolled raw HTTP requests bypassing the typed SDK model) for a feature that's otherwise fully supported.

See C# code does not accept the SentToContact:

Image

Suggested fix
Remove the readOnly: true line from CreditNote.SentToContact in xero_accounting.yaml, matching Invoice.SentToContact. This should be a small, self-contained fix, and would let the next SDK regeneration (Xero-NetStandard, and any other generated clients) expose a proper public setter — currently every Xero.NetStandard.OAuth2 release from at least v13.0.0 through the latest v17.0.0 inherits this restriction, so consumers won't see the fix until a new SDK version is cut from an updated spec.

Environment / repro
Confirmed via Xero API Explorer: creating a credit note with SentToContact: true in the request body succeeds.
Confirmed via Xero API Explorer: calling Update Credit Note with only CreditNoteID and SentToContact: true in the body succeeds on an approved credit note.
Confirmed the readOnly: true flag is present in the current master branch of xero_accounting.yaml as of July 2026.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions