Four collections paginate, and branding goes wrapped
Four collections now paginate — without limit you get the first 20 — and the three branding responses come wrapped in {success, data, meta}.
Two changes that close the last inconsistencies in how the canonical surface answers: three responses that came back bare are now wrapped like every other one, and four collections that grew without a bound now paginate.
Both are visible from outside, so both are written down here even though neither had documented consumers.
What else changed
- Three branding responses are now wrapped.
GETandPUT /v1/companies/{company_id}/invoice-customizationandPUT /v1/companies/{company_id}/logowere the last operations answering the resource bare. Move your read one level down:body.logo_urlbecomesbody.data.logo_url. The logoDELETEstill answers204— there is no body to wrap. - Four collections now paginate, with the API's normal
page/limitand its normal defaults: without them you get the first 20 items, not all of them. They areGET /v1/accounts/{account_id}/members,.../members/{member_id}/grants,GET /v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}/historyandGET /v1/accounts/{account_id}/companies/stats. The array still travels under the same key —paginationis simply added beside it. statspages like its parent list. AskingGET /v1/accounts/{account_id}/companies/statsandGET /v1/accounts/{account_id}/companieswith the samepage/limitreturns the two responses aligned company by company.- The deprecated flat aliases are untouched, byte for byte. In particular
GET /v1/recurring-invoices/{recurring_invoice_id}/historydoes not paginate: it is frozen as it shipped until its retirement date. Reshaping a route that is going away only breaks the people still on it. - Every collection now declares how it is walked. A list either carries
pagination, or is marked a closed catalogue, or declares a cursor style — so the absence ofpaginationis no longer something you have to guess about. These are spec annotations: not one byte of any response changes because of them.
Endpoints
- GET|PUT/v1/companies/{company_id}/invoice-customizationNow wrapped in {success, data, meta}
- PUT/v1/companies/{company_id}/logoNow wrapped in {success, data, meta}
- GET/v1/accounts/{account_id}/membersPaginated — first 20 by default
- GET/v1/accounts/{account_id}/members/{member_id}/grantsPaginated — first 20 by default
- GET/v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}/historyPaginated — first 20 by default; the flat alias is not
- GET/v1/accounts/{account_id}/companies/statsPaginated, aligned with the companies list
Where to go next
VeriFactu is always on in sandbox
A company created with a test key is born with VeriFactu on, and its NIF is registered on the first submission. Live is unchanged.
The census is checked before the invoice is numbered
Issuing with VeriFactu on checks the recipient against the AEAT census first: an uncensused recipient answers `422`, and no number is spent.