. Variant="info" is a tint, not the
signal; a screen reader hears "GET" from the badge text.
MULTI-LINE CODE COMES FROM THE VIEW, for the same Django tokenizer reason the
docs article documents: a literal newline inside an include with= value breaks
the tag. request_curl_code, request_python_code and response_success_code are
ordinary context strings, autoescaped; no |safe. A consumer who highlights
server-side follows _code.html's own recipe.
REQUEST EXAMPLES ARE STACKED, not tabbed. Language tabs ({% templatetag
openblock %} bw_tabs {% templatetag closeblock %}) are available and legal on
this shell, but a reference page whose job is "copy the call for your stack"
benefits from both snippets being visible without a navigation. A consumer who
prefers tabs composes them the same way settings.html does.
BREADCRUMBS and ON THIS PAGE follow the article's pattern: the docs shell ships
neither, so this page authors both once the heading ids are known (ADR-091
decision 2).
States: reference_state is the page's real branch.
"ready" (the normal case, and the a11y fixture): full signature, tables and
examples.
"empty": the operation is not published in this API version yet (or was
withdrawn). Renders _empty_state.html in place of the body bands; search,
breadcrumbs and the rail still render, because the rest of the docs site
is still there.
"error": the schema this page is generated from could not be loaded (a real
case for docs sites that build the reference from an OpenAPI fetch or a
build artefact). Renders {% templatetag openblock %} bw_alert {% templatetag closeblock %}
variant="danger", never a callout: this is a status failure
about something that just happened, not editorial advice that is always
true (see article.html's CALLOUT vs bw_alert note).
LOADING: not applicable. This page is server-rendered from context supplied
at request time; there is no client-side schema fetch of its own. A future
htmx-refreshed schema band would need a loading state; this one does not.
Accessibility: inherits the docs shell's skip link and lang/dir/theme
attributes. This page's own contribution: breadcrumb landmark, role="search"
in the site header, consumer-authored On this page TOC, semantic bw-prose
body (real h2/h3/p/table), method badge whose label carries the verb in
words, parameter and status tables wrapped in focusable scroll regions,
code panels with copy controls, and prev/next links whose text names the
destination. The empty and error branches keep the same landmarks so a
screen-reader user is not dropped into a different page chrome when the
body swaps.
Responsive: no breakpoint of its own; inherits shell/docs.html's
single-column-to-two-column switch at --bw-breakpoint-lg. Tables and code
panels scroll horizontally inside their own regions rather than reflowing.
{% endcomment %}
{% load i18n brickwork_components brickwork_nav %}
{% block page_title %}Retrieve an invoice - Northwind API{% endblock %}
{% block docs_site_header %}
{% translate "Northwind docs" %}
{% bw_search docs_search_action placeholder="Search the docs..." %}
{% endblock %}
{% block docs_header %}
{% translate "Retrieve an invoice" %}
{% translate "Return one invoice by id, including line items, balances and the current collection stage." %}
{% translate "API v3 ยท Last updated 12 August 2026." %}
{% endblock %}
{% block content %}
{% if reference_state == "empty" %}
{% comment %}
EMPTY: the operation is not published in this version. Same day-one /
withdrawn case as a docs home with no published sections, but scoped to one
operation rather than the whole tree.
{% endcomment %}
{% include "brickwork/components/_empty_state.html" with heading="Not in this API version" body="Retrieve invoice is not published on API v3 yet. Stay on v2 for this operation, or contact support if you were sent here from a migration guide." icon="document" action_href="/docs/v2/api-reference/invoices/retrieve/" action_label="Open the v2 reference" %}
{% elif reference_state == "error" %}
{% comment %}
ERROR: the schema behind this page failed to load. bw_alert, not a callout:
this is a status failure about the current request, announced via role="alert".
{% endcomment %}
{% bw_alert "The OpenAPI schema for API v3 could not be loaded, so this reference page has nothing trustworthy to show. Retry in a moment, or open the status page if the outage continues." title="Reference unavailable" variant="danger" %}
{% else %}
{% comment %}
READY: the full operation reference. On this page sits outside .bw-prose so
the TOC list is not restyled by the prose floor.
{% endcomment %}
Use this operation when you already know the invoice id and need its
current state. List and search are separate endpoints; this one never
filters.
Signature
#
{% bw_badge "GET" variant="info" %}
/v3/invoices/{id}
{% translate "Authentication" %}
Requires a secret API key in the Authorization header
as Bearer <key>. Publishable keys are rejected
with 401.
Parameters
#
Path parameters are required. Query parameters are optional and never
change which invoice is returned; they only shape the payload.
{% translate "Path parameters" %}
{% translate "Name" %}
{% translate "Type" %}
{% translate "Description" %}
id
{% translate "string" %}
{% translate "The invoice id returned by create or list. Format: inv_ followed by 24 hex characters." %}
{% translate "Query parameters" %}
{% translate "Name" %}
{% translate "Type" %}
{% translate "Description" %}
expand
{% translate "string" %}
{% translate "Comma-separated related objects to inline. Supported: customer, line_items." %}
idempotency_key
{% translate "string" %}
{% translate "Optional. Retrieve is safe to retry without it; include one only when your client retries every request uniformly." %}
Request
#
No request body. The examples below fetch the same invoice with
line_items expanded.
{% include "brickwork/components/_code.html" with filename="Terminal" language="curl" copyable=True code=request_curl_code %}
{% include "brickwork/components/_code.html" with filename="retrieve_invoice.py" language="Python" copyable=True code=request_python_code %}
Response
#
A successful response returns the invoice object. Amounts are minor units
of the invoice currency; never floating-point major units.
{% include "brickwork/components/_code.html" with filename="200.json" language="JSON" copyable=True code=response_success_code %}
{% translate "Before you cache this" %}
balance_due and collection_stage change as
payments and reminders land. Cache the id and the static fields;
re-fetch before any chase or write-off decision.
Status codes
#
{% translate "HTTP status codes this operation returns" %}
{% translate "Code" %}
{% translate "Meaning" %}
200
{% translate "Invoice found and returned." %}
401
{% translate "Missing or invalid API key, or a publishable key was used." %}
404
{% translate "No invoice with that id exists in this account." %}
429
{% translate "Rate limited. Retry after the Retry-After header." %}
Further reading: List invoices
and Authenticating requests with an API key.
{% endif %}
{% endblock %}
{% block docs_footer %}
{% if reference_state == "ready" %}
{% translate "More in Invoices" as bw_pager_aria_label %}
{% translate "List invoices" as bw_pager_previous_label %}
{% translate "Create an invoice" as bw_pager_next_label %}
{% include "brickwork/components/_pager.html" with aria_label=bw_pager_aria_label previous_href="/docs/api-reference/invoices/list/" previous_label=bw_pager_previous_label next_href="/docs/api-reference/invoices/create/" next_label=bw_pager_next_label %}
{% endif %}
{% endblock %}
{% block docs_nav %}
{% bw_nav items=docs_nav_items active=docs_nav_active %}
{% endblock %}