C2A-01 Customers
Lets the tenant backend project a customer identity into Azotte and keep it synchronized. Every other C2A flow (offers, checkout, payment methods, subscriptions) is bound to an Azotte customer record, so this is the first integration step.
Concepts
CustomerUrn— Azotte-generated unique resource name (e.g.cu.00.482). Use in every downstream call.ExternalId— your own identifier from the tenant system. Azotte stores it next to the Azotte URN so you can look the customer up by either side.- Two-system identity — Azotte never owns customer identity; the tenant system does. Azotte holds an Azotte-side projection used for orchestration.
Base Route
/api/c2a/customer
All endpoints require these request headers:
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | Tenant API key. |
x-tn | Yes | Tenant identifier. |
Content-Type | Yes | application/json. |
Auth policy: JwtTenant + API-key policy. Output content type: application/clientOutput+Json.
Endpoints
| # | Method | Path | Purpose |
|---|---|---|---|
| C2A-01-01 | POST | /api/c2a/customer/validate | Validate Customer ExternalId |
| C2A-01-02 | POST | /api/c2a/customer/store | Store New Customer |
| C2A-01-03 | POST | /api/c2a/customer/delete | Delete Customer (GDPR) |
| C2A-01-04 | POST | /api/c2a/customer/update | Update Customer |
| C2A-01-05 | GET | /api/c2a/customer/info | Fetch Customer Information |
Error Statuses
All responses carry an AzotteStatus. Most relevant for Customers:
| HTTP | messageCode | Meaning |
|---|---|---|
| 200 | SUCCESS | Operation completed. |
| 400 | BAD_REQUEST | Null request.Customer. |
| 400 | INVALID_REQUEST | FluentValidation rule failed (ToAzotteStatus). |
| 401 | — | [Authorize(PolicyApiKey)] / JwtTenant rejected. No envelope. |
| 404 | CUSTOMER_NOT_FOUND | URN / ExternalId did not resolve (fetch / update / delete). |
| 409 | CUSTOMER_ALREADY_STORED | externalIdentifier already projected. |
| 409 | USER_WITH_SAME_EMAIL_EXISTS | Email collides with another tenant customer. |
| 409 | USER_WITH_SAME_PHONE_NUMBER_EXISTS | Phone collides with another tenant customer. |
| 500 | SQL_DATABASE_FAILURE | DB insert returned null. |
| 500 | INTERNAL_SERVER_ERROR | Unhandled exception caught by controller. |
Source
- Controller:
Azotte.Api.Gateway.Controllers.C2A.C2A_01_CustomersController - Service:
Azotte.Customers.ICustomersService - DTOs:
Azotte.Definitions/Customers/Dto/* - Postman:
documents/PostmanSamples/C2A API.postman_collection.json