Skip to content

Add a contact (ANALYST+, dashboard user)

POST
/suppliers/{supplierId}/contacts
curl --request POST \
--url https://api.invogi.com/v1/suppliers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "email": "hello@example.com", "phone": "example", "role": "example", "isPrimary": true }'

The people recovery claims are addressed to. Invogi never writes to them. The first contact becomes the primary; isPrimary: true makes a new one primary instead. A merged supplier is refused (409): add contacts to the supplier it was merged into.

supplierId
required
string format: uuid
Media typeapplication/json
object
name

Required when adding

string
>= 1 characters <= 200 characters
email
string | null format: email
<= 320 characters
phone
string | null
<= 50 characters
role
string | null
<= 100 characters
isPrimary
boolean

Example generated

{
"name": "example",
"email": "hello@example.com",
"phone": "example",
"role": "example",
"isPrimary": true
}

The contact

Media typeapplication/json
object
id
required
string format: uuid
supplierId
required
string format: uuid
name
required
string
email
string | null format: email
phone
string | null
role

E.g. Accounts receivable

string | null
isPrimary
required
boolean
updatedAt
string format: date-time

Example generated

{
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"supplierId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"name": "example",
"email": "hello@example.com",
"phone": "example",
"role": "example",
"isPrimary": true,
"updatedAt": "2026-04-15T12:00:00Z"
}

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"
}
}