Validate NRS Invoice
PASSTHROUGH-only, unbilled validation. Gateway verifies business_id and supplier TIN against the represented business before calling NRS.
Authorization
apiKey The API key generated for your business in Duplo Dashboard. The credential's ipWhitelisted setting is enforced end to end on the customer-facing custom-domain Gateway routes in this public contract. A trusted edge overwrites the configured client-IP header and Gateway carries that verified address over its authenticated internal hop; caller-supplied X-Forwarded-For values are never trusted. An empty IP allowlist permits any source. When an allowlist is configured, a missing, malformed, or nonmatching verified client address is rejected with HTTP 403.
In: header
Header Parameters
Immutable gatewaySubBusinessId returned by onboarding/list. Gateway resolves it to the current audited NRS identity before dispatch.
1 <= length <= 255Optional caller correlation metadata. Gateway creates a new authoritative request ID, returns it in the response X-Request-ID header and Problem Details requestId, and propagates that generated value to its dependencies.
^[A-Za-z0-9][A-Za-z0-9._:-]*$1 <= length <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/api/v1/invoice/validate" \ -H "x-sub-business-id: string" \ -H "X-Request-ID: erp-run-20260916-0042" \ -H "Content-Type: application/json" \ -d '{}'nullnullnull{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}{
"type": "http://example.com",
"title": "string",
"status": 400,
"detail": "string",
"instance": "http://example.com",
"code": "GW_REQUEST_INVALID_JSON",
"requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",
"timestamp": "2019-08-24T14:15:22Z",
"action": {
"code": "string",
"description": "string",
"documentation": "http://example.com"
},
"retry": {
"strategy": "DO_NOT_RETRY",
"sameIdempotencyKey": true,
"afterSeconds": 0
},
"errors": [
{
"location": "header",
"field": "string",
"pointer": "string",
"code": "REQUIRED",
"detail": "string"
}
],
"operationId": "string",
"message": "string",
"statusCode": 0,
"path": "string"
}How is this guide?
Last updated on