Get a merchant
LiveServed by the v1 API in development with the same checks as production; production opens on the same contract. The capabilities from before v1 keep running in production at the path your account team gives you.
Returns the merchant with its CSD and onboarding status.
Needs the merchants:read scope.
oauth2 merchants:readAuthorizationBearer <token>OAuth 2.0 client credentials. Exchange your client_id and client_secret at /oauth/token of the environment for a bearer token valid for one hour. The playground of every operation asks for your own client and keeps it in your browser tab only.
Scope: merchants:read
id*stringThe merchant id.
^mer_[0-7][0-9a-hjkmnp-tv-z]{25}$OK
application/json- response
id*string^mer_[0-7][0-9a-hjkmnp-tv-z]{25}$external_id*stringstatus*stringpending_csd until the merchant uploads their CSD; active when they can invoice; active_pending_sat while the SAT confirms a new CSD; csd_expiring 30 days before it expires; csd_expired, suspended or closed when they cannot invoice.
"pending_csd""active""active_pending_sat""csd_expiring""csd_expired""suspended""closed"rfc*stringRFC, 12 characters (company) or 13 (individual). The merchant issues the invoices with it.
^[A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3}$legal_name*stringtrade_name?string|nullslug*stringShort name in the merchant's invoicing link.
^[a-z0-9]+(-[a-z0-9]+)*$3 <= length <= 40tax_regime*stringpostal_code*stringemail?|nulllocations?array<>default_item*|What the invoice says when a charge comes without items. Null if the merchant has none.
csd*onboarding*created_at*stringdate-timeupdated_at*stringdate-timecurl -X GET 'https://api.dev.b2b.heru.app/v1/merchants/mer_01m4ra8wsyfh3s0tr4nrq3y96j'{ "id": "mer_01m4ra8wsyfh3s0tr4nrq3y96j", "external_id": "AFIL-000123", "status": "active", "rfc": "HEGL900101K44", "legal_name": "JOSE LUIS HERNANDEZ GARCIA", "trade_name": "Cafetería La Esquina", "slug": "cafeteria-la-esquina", "tax_regime": "612", "postal_code": "06700", "email": "facturacion@cafeteria-la-esquina.example", "locations": [ { "external_id": "SUC-01", "name": "Sucursal Roma", "postal_code": "06700" }, { "external_id": "SUC-02", "name": "Sucursal Condesa", "postal_code": "06140" } ], "default_item": { "product_code": "90101500", "unit_code": "E48", "description": "Consumo de alimentos y bebidas", "vat_rate": "0.16" }, "csd": { "active": true, "valid_from": "2025-03-18", "valid_to": "2029-03-18" }, "onboarding": { "status": "completed", "url": null, "expires_at": null, "completed_at": "2026-10-12T15:41:27.904Z" }, "created_at": "2026-10-12T15:04:06.206Z", "updated_at": "2026-10-12T18:10:58.543Z"}List merchantsGET
Merchants of your company, most recent first. Needs the `merchants:read` scope.
List chargesGET
Charges of your company, most recent first. Every filter is optional and they combine. `qr` is always null in a list and `invoice` is summarised; read `GET /charges/{id}` for the QR and the whole invoice. Needs the `charges:read` scope.