Skip to content

The people and companies you bill, and how to add one.

2 endpoints, each with the fields it takes and the fields it gives back.

GET/customers

Lists the customers in your account, the billing contacts invoices go to.

  • A key limited to certain businesses still sees every customer: customers belong to your account, not to one business.
  • In search, % and _ are wildcards, because the match runs as a SQL ilike.
  • To read the next page, pass the previous response's nextCursor. A null there means you already have everything.

Needs the customers:read permission. A Read only key has it.

Query parameters

search
Typestring
RequiredOptional
Details
  • up to 200 characters
includeArchived
Typestring
RequiredOptional
Details
  • one of: true, false
cursor
Typestring
RequiredOptional
Details
  • an opaque value from a previous response
limit
Typeinteger
RequiredOptional
Details
  • 1 to 100, default 50
Request
curl "https://www.numm.io/api/v1/customers?search=Acme" \
  -H "Authorization: Bearer nmo_live_REPLACE_WITH_YOUR_KEY"
Response 200
{
  "customers": [
    {
      "id": "0190a1b2-c3d4-7e5f-9a9b-0c1d2e3f1005",
      "name": "Acme Co",
      "email": "ap@acme.example",
      "currency": "USD",
      "paymentTermsDays": 30
    }
  ],
  "nextCursor": null
}

Response fields

customers
Typearray of object
PresentAlways
customers[].id
Typestring
PresentAlways
Details
  • a uuid
customers[].name
Typestring
PresentAlways
customers[].email
Typestring or null
PresentAlways
customers[].currency
Typestring
PresentAlways
Details
  • one of: USD, CAD, EUR, GBP, MXN
customers[].paymentTermsDays
Typeinteger or null
PresentAlways
nextCursor
Typestring or null
PresentAlways
Details
  • an opaque value from a previous response

Errors

This call can return:

invalid_key
Status401
MeaningYour key is missing, malformed, revoked, or expired.
insufficient_scope
Status403
MeaningYour key does not carry the scope this endpoint needs.
rate_limited
Status429
MeaningYou've made too many requests for this key. The retry-after header says how long to wait.
validation_failed
Status422
MeaningSomething in the path, the query, or the body did not pass validation.
internal_error
Status500
MeaningSomething went wrong on our side. Try again.

POST/customers

Creates a customer, a billing contact invoices go to.

  • If a customer with this name already exists, that one is returned and nothing is changed: created is false and the other fields you sent are ignored.
  • The match ignores case and skips archived customers.
  • A customer that was created answers 201. One that already existed answers 200.

Needs the customers:write permission. Only a Read and write key has it.

Body fields

name
Typestring
RequiredRequired
Details
  • up to 200 characters
email
Typestring
RequiredOptional
Details
  • an email address
  • up to 320 characters
phone
Typestring
RequiredOptional
Details
  • up to 40 characters
addressLine1
Typestring
RequiredOptional
Details
  • up to 200 characters
addressLine2
Typestring
RequiredOptional
Details
  • up to 200 characters
city
Typestring
RequiredOptional
Details
  • up to 200 characters
state
Typestring
RequiredOptional
Details
  • up to 200 characters
postalCode
Typestring
RequiredOptional
Details
  • up to 200 characters
currency
Typestring
RequiredOptional
Details
  • one of: USD, CAD, EUR, GBP, MXN
paymentTermsDays
Typeinteger
RequiredOptional
Details
  • 0 to 365
remindersEnabled
Typeboolean
RequiredOptional
Request
curl -X POST "https://www.numm.io/api/v1/customers" \
  -H "Authorization: Bearer nmo_live_REPLACE_WITH_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0190a1b2-c3d4-7e5f-8a9b-0c1d2e3fee00" \
  -d '{
  "name": "Acme Co",
  "email": "ap@acme.example"
}'
Response 201
{
  "id": "0190a1b2-c3d4-7e5f-9a9b-0c1d2e3f1005",
  "created": true
}
  • 200 A customer with this name already exists, so nothing was created.
  • 201 A customer was created.

Response fields

id
Typestring
PresentAlways
Details
  • a uuid
created
Typeboolean
PresentAlways

This call takes an optional Idempotency-Key header. Repeat the same request with the same key within 24 hours and you get the first response back, with an idempotent-replayed: true header, and the work does not run twice. The same key with a different request is refused. See Idempotency and safe retries.

Errors

conflict
Status409
MeaningThe request clashed with something that already happened.

Every endpoint can also return:

invalid_key
Status401
MeaningYour key is missing, malformed, revoked, or expired.
insufficient_scope
Status403
MeaningYour key does not carry the scope this endpoint needs.
rate_limited
Status429
MeaningYou've made too many requests for this key. The retry-after header says how long to wait.
validation_failed
Status422
MeaningSomething in the path, the query, or the body did not pass validation.
internal_error
Status500
MeaningSomething went wrong on our side. Try again.
Customers — Nummio API