Skip to content

Prepare the supplier claim letter and evidence (ANALYST+, dashboard user)

POST
/recoveries/{caseId}/claim-pack
curl --request POST \
--url https://api.invogi.com/v1/recoveries/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/claim-pack \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "route": "REFUND", "offsetInvoiceIds": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "contactName": "example", "contactId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "templateId": "example" }'

Deterministic, from stored records only, for the open balance. Invogi never sends it: the user reviews it and sends it from their own mail system, then logs the contact. Generating it is recorded on the case, with the template and contact used. templateId picks the letter (default builtin:CLAIM, the reviewed claim letter; see /recovery-templates). contactId addresses it to one of the supplier’s contacts: it fills the greeting and to.

caseId
required
string format: uuid
Media typeapplication/json
object
route
required
string
Allowed values: REFUND CREDIT_NOTE OFFSET
offsetInvoiceIds

Must be among the case’s offsetCandidates

Array<string>
<= 20 items
contactName

Ignored when contactId is given

string
<= 200 characters
contactId

One of the case supplier’s contacts

string format: uuid
templateId

Builtin:CLAIM, builtin:FOLLOW_UP, builtin:FINAL_REMINDER, or a workspace template id; a STATEMENT_REQUEST letter is refused (400)

string

The claim pack

Media typeapplication/json
object
subject
required
string
body
required
string
evidence
required
Array<object>
object
label
required
string
detail
required
string
to

The chosen contact’s email

string | null
template
object
id
string
name
string
purpose
string
Allowed values: CLAIM FOLLOW_UP FINAL_REMINDER STATEMENT_REQUEST

Example

{
"template": {
"purpose": "CLAIM"
}
}

Invalid request

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: NOT_FOUND UNAUTHORIZED FORBIDDEN INVALID_REQUEST CONFLICT RATE_LIMITED USAGE_LIMIT_EXCEEDED PROCESSING_FAILED
message
required
string
request_id
required
string

Example

{
"error": {
"code": "NOT_FOUND"
}
}

API key lacks required scope/role

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: NOT_FOUND UNAUTHORIZED FORBIDDEN INVALID_REQUEST CONFLICT RATE_LIMITED USAGE_LIMIT_EXCEEDED PROCESSING_FAILED
message
required
string
request_id
required
string

Example

{
"error": {
"code": "NOT_FOUND"
}
}

Resource not found

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: NOT_FOUND UNAUTHORIZED FORBIDDEN INVALID_REQUEST CONFLICT RATE_LIMITED USAGE_LIMIT_EXCEEDED PROCESSING_FAILED
message
required
string
request_id
required
string

Example

{
"error": {
"code": "NOT_FOUND"
}
}

Conflicting idempotency key or resource processing state

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: NOT_FOUND UNAUTHORIZED FORBIDDEN INVALID_REQUEST CONFLICT RATE_LIMITED USAGE_LIMIT_EXCEEDED PROCESSING_FAILED
message
required
string
request_id
required
string

Example

{
"error": {
"code": "NOT_FOUND"
}
}