Skip to content
Last updated

EviPost

EviPost is the Namirial Notify service for sending certified physical postal communications — the digital equivalent of a burofax. The document is physically printed and delivered to the recipient's address by the postal operator, with each step in the postal process recorded as evidence and optionally generating a signed affidavit.

For the API reference, see the EviPost API.


When to use EviPost

Use EviPost when:

  • Physical delivery is required or preferred — the recipient must receive a printed, sealed document at their postal address.
  • You need legally binding evidence of physical delivery — the postal operator reports delivery outcomes that feed into certified affidavits.
  • The communication cannot be sent digitally — for jurisdictions or situations where certified physical mail (burofax equivalent) carries specific legal weight.

Use EviMail when certified delivery via email is sufficient. Use EviNotice when you need a hosted digital notice with recipient authentication and commitment workflows. Use EviSMS for certified mobile delivery.

:::warning Timeline expectation EviPost operates on postal timelines — days or weeks, not minutes. Design your integration to accommodate asynchronous state updates driven by postal operator events rather than immediate confirmation. :::


How EviPost works

Lifecycle overview

Submit accepted

Document validated, dispatched to postal operator

Invalid document (Failed)

Postal operator acknowledged

Courier collected the item

Item in transit

Item in transit (direct)

Delivered to recipient

Delivery not possible

Item disposed after failed delivery

Postal operator reported failure

Lifecycle complete

Lifecycle complete

Lifecycle complete

Lifecycle complete

Cancelled by issuer

Cancelled by issuer

Cancelled by issuer

Lifecycle complete

Submitted

Processed

Closed

Dispatched

Issued

Sent

Delivered

Undelivered

Disposed

Failed

Cancelled

Key state transitions

Submitted → Processed — Namirial Notify validates the document (PDF format and page count), certifies it, and dispatches a send request to the postal operator. If the document is invalid or the page count exceeds the subscribed tier, the communication closes immediately as Failed.

Processed → Dispatched — The postal operator acknowledged receipt of the item.

Dispatched → Issued — The courier collected the item for physical delivery. Issued is an operator-reported intermediate state; not all operators or service profiles report it.

Issued / Dispatched → Sent — The item is in transit with the postal operator or courier.

Sent → Delivered — The item was successfully delivered to the recipient. For registered post (burofax), this requires the recipient to sign for delivery.

Sent → Undelivered — The postal operator could not complete delivery. The item may be held at a post office or returned.

Undelivered → Disposed — The item was disposed of after the retention period at the post office expired.

Any state → Cancelled — The issuer explicitly cancelled the communication via the platform before delivery was completed.


Submit a certified postal communication

POST /v1/EviPost/Submit

Returns { "uniqueId": "..." } on success. Note that uniqueId is camelCase, consistent with the other v1 services — the equivalent field in EviMail and EviSMS is named eviId.

Required fields

FieldDescription
DocumentThe letter or document to be sent, base64-encoded PDF.
RecipientAddressPhysical delivery address. See Address fields.

Optional fields

  • RecipientName — display name of the recipient.
  • RecipientLegalName — legal name of the recipient, recorded in the certification evidence.
  • IssuerName — display name of the sender.
  • IssuerLegalName — legal name of the sender, recorded in the evidence.
  • IssuerAddress — return address for the sender. See Address fields.
  • Options — processing and certification settings. When omitted, platform defaults apply. See Options.
  • LookupKey — your own correlation key, filterable in Query.
  • RecipientPhone — recipient's mobile number.
  • RecipientEmail — recipient's email address.
  • IssuerPhone — sender's phone number.
  • IssuerEmail — sender's email address.
  • IssuerComments — additional comments from the sender, included in the evidence.

Address fields

Both RecipientAddress and IssuerAddress use the same structure:

FieldRequiredDescription
StreetAddressYesStreet name and number.
PostalCodeYesPostal code.
LocalityYesCity or town.
CountryYesISO 3166-1 alpha-2 country code (e.g. ES).
RegionNoProvince or region.
PostOfficeBoxAddressNoPost office box address, if applicable.

Options

All processing and certification configuration lives inside the Options object.

Every field in Options is optional at the API level. When you omit one, the platform applies a default (noted per field below) — for example PostServiceType becomes Registered, Language follows your site's configured language, AffidavitProfile is inferred from CertificationLevel, and EvidenceAccessControlMethod follows the account's configured default method. The web portal's submission form presents these same settings with a default already selected, so a value is always recorded whichever channel you use. The few genuinely conditional requirements — PostServiceProfile for Letter, and the challenge fields for the Challenge access method — are called out below.

  • PostServiceTypeRegistered (default), Letter, or LetterLite. If omitted, defaults to Registered. See Service types below.
  • PostServiceProfile — identifier of the postal-service profile to use. Required when PostServiceType is Letter (the profile selects the printing/logistics variant and must be provisioned for your account beforehand). Not used for Registered or LetterLite.
  • CertificationLevel — the legal framework applied. Supported values include Standard, Advanced, and regional variants such as Standard_EU or Advanced_EU. Availability depends on the account. EviPost does not support QERDS certification levels.
  • AffidavitProfile — controls which affidavits are generated. If omitted, it is inferred from CertificationLevel; if you set it explicitly, it must be consistent with the certification level. See Affidavit profiles below.
  • AffidavitsOnDemandEnabled — set true at submit time to allow on-demand affidavit generation later via POST /v1/EviPost/AffidavitRequest. Requires an advanced AffidavitProfile (AdvancedContentOnSubmit, AdvancedContentOnClose, or AdvancedContentOnSubmitAndOnClose). Cannot be enabled retroactively.
  • OnlineRetentionPeriod — years the communication and its evidence remain accessible online. Default: 1 year.
  • NotaryRetentionPeriod — years of notarial custody. Set to 5 to apply notarial retention; set to 0 to disable. Requires NotaryProfile when greater than 0.
  • NotaryProfile — identifier of the notary for custody. Required when NotaryRetentionPeriod > 0.
  • EvidenceAccessControlMethod — controls how the evidence record is accessed: Public, Challenge, AutoChallenge (the account's configured default method applies when omitted). When set to Challenge, you must also supply EvidenceAccessControlChallenge and EvidenceAccessControlChallengeResponse.
  • EvidenceAccessControlChallenge / EvidenceAccessControlChallengeResponse — the challenge question and its expected answer. Both are required when EvidenceAccessControlMethod is Challenge.
  • Language — language for the evidence record and affidavit documents. If omitted, defaults to your site's configured language.
  • PushNotificationUrl — HTTPS endpoint to receive state callbacks. Optional; if you set it, also set PushNotificationFilter — without a filter, no events are sent.
  • PushNotificationFilter — state transitions that trigger a callback. Valid values: Processed, Dispatched, Sent, Delivered, Closed, Cancelled, Issued, Disposed, AffidavitPublished. AffidavitPublished is a platform meta-event that fires when affidavit generation completes — it is not a lifecycle state.
  • PushNotificationExtraData — arbitrary string echoed back in every callback.
  • CostCentre — optional billing group identifier.
  • CustomFields — array of custom key-value fields attached to the submission. Fields with IsLookupKey: true are indexed and returned in query results under LookupKey.

Idempotency

Include X-Evi-IdempotencyToken on every Submit. Use a UUID and keep it constant across retries. A replay of a 200 OK submission returns 202 Accepted; the communication is not resubmitted.


Service types

EviPost physical delivery is currently available for destinations within Spain. Senders located outside Spain can use EviPost to deliver to Spanish addresses. Availability of each service type and PostServiceProfile depends on your account provisioning.

Registered (default)

Sends a certified postal communication equivalent to a burofax, delivered through the national postal operator (Correos). The operator tracks the item through the postal chain and reports delivery outcomes. Suitable when you need maximum tracking and evidence coverage. This is the standard choice for most integrations.

Delivery attempts for Registered are handled by the postal operator and are not configured through the submit request — the delivery-attempt and disposal options below apply to Letter only.

Letter

Sends the document to a printing and enveloping provider (MRW) for certified delivery. Requires prior provisioning by your Namirial Notify contact, and a PostServiceProfile must be supplied. Supports optional delivery receipt and delivery attempt tracking:

  • EnableDeliveryReceipt — request a signed delivery receipt from the provider.
  • EnableDeliveryAttempts — enable delivery attempt tracking.
  • DeliveryAttemptsNumber — number of delivery attempts before the process ends.
  • DisposalDaysAmmount — days after which the item is disposed of if undelivered. Note: the field name contains a typo (Ammount) that matches the API contract.
  • PostServiceProfile — profile identifier for the printing and enveloping provider. Required for Letter, and must be provisioned before use.

Letter Lite

A lower-cost printed certified letter (LetterLite), delivered through MRW. It is a single-attempt service with the following constraints, enforced at submit time:

  • Available only for destinations within mainland Spain — the Spanish islands, Ceuta, Melilla, Portugal, Andorra, and Gibraltar are excluded.
  • A single delivery attempt — the delivery-attempt options (EnableDeliveryAttempts, DeliveryAttemptsNumber) cannot be used.
  • No disposal step — DisposalDaysAmmount cannot be used.
  • PostServiceProfile is not required.

Affidavit profiles

AffidavitProfile in Options controls which affidavits are generated:

ValueDescription
NoneNo affidavits generated.
BasicA single receipt affidavit when tracking is complete. Default for Standard certification.
AdvancedContentOnSubmitOne affidavit per event, plus a timestamped content affidavit at submission. Default for Advanced certification.
AdvancedContentOnCloseOne affidavit per event, plus a receipt showing the document body when tracking is complete.
AdvancedContentOnSubmitAndOnCloseCombination of the above two.

To enable on-demand affidavit generation via POST /v1/EviPost/AffidavitRequest, set AffidavitsOnDemandEnabled: true and use an Advanced profile. This cannot be enabled retroactively.


Callbacks and what you receive

When a state in PushNotificationFilter is reached, Namirial Notify sends an HTTP POST to PushNotificationUrl.

Base payload

FieldTypeDescription
IdentifierstringUnique ID of this callback delivery. Use it to deduplicate — the platform retries on non-2xx and on timeouts.
KindstringThe state or event that triggered this callback (e.g. Dispatched, Sent, Delivered, Closed).
DatedatetimeTimestamp of the event.
EvidenceIdUUIDThe UniqueId of the EviPost, as returned at submission.
EvidenceTypestringAlways eviPost for EviPost callbacks.
SitestringName of the issuer's site.
OwnerstringName of the account owner.
OwnerEmailstringEmail address of the account owner.
AdditionalDataobjectEvent-specific fields. Always includes the fields listed below.

AdditionalData fields — always present

FieldDescription
SenderName of the sender (IssuerName).
RecipientName of the recipient (RecipientName).
LookupKeyThe integrator-assigned lookup key set at submission.
StateCurrent lifecycle state.
CreationDateTimestamp when the communication was submitted.
ExtraDataThe PushNotificationExtraData value set at submission, if provided.

AdditionalData fields — per event

Callback KindExtra fields
Dispatched, Sent, IssuedTransmissionDetails — postal operator transmission details for this event.
DeliveredDetails — delivery details reported by the postal operator.
ClosedOutcome — the final outcome of the postal process.
AffidavitPublishedAffidavitId, AffidavitName — identifiers of the generated affidavit. RequestId — present when the affidavit was generated on demand.

Callback reliability

Make your handler idempotent, keyed on Identifier. Return 2xx promptly. Use PushNotificationExtraData to embed a routing key for correlation.


States reference

StateDescription
UnknownState is not known or has not been mapped.
DraftCommunication prepared but not yet submitted.
SubmittedAccepted by the platform, pending document validation and processing.
ProcessedDocument validated and certified; send request dispatched to the postal operator.
DispatchedPostal operator acknowledged receipt of the item.
IssuedCourier collected the item for physical delivery. Operator-specific; not all providers report this step.
SentItem is in transit with the postal operator or courier.
DeliveredDelivered to the recipient. For registered post, this requires the recipient's signature.
UndeliveredDelivery was not possible. Item may be held at a post office or returned.
MissingItem cannot be located by the postal operator. Operator-specific intermediate state.
DisposedItem disposed of after the post-office retention period expired following an undelivered outcome.
FailedA processing or delivery failure occurred.
CancelledCommunication was cancelled by the issuer before delivery was completed.
ClosedLifecycle complete. No further events expected.

On timeline: state changes after Processed are driven entirely by postal operator events. Expect hours or days between transitions. Do not poll aggressively — use PushNotificationFilter to subscribe to the transitions you care about and use Query only as a fallback.

On Issued: not all postal operators or service profiles report this step. Your integration must not depend on receiving an Issued callback — plan for the direct Dispatched → Sent path.


Outcomes reference

EviPost is the only Namirial Notify service with a distinct set of postal outcomes, reflecting the range of physical delivery results reported by operators:

OutcomeDescription
UnknownOutcome not known or not yet mapped.
NoneNo outcome determined yet.
DispatchedItem dispatched to the operator. Intermediate outcome, may be superseded.
AcknowledgedPostal operator acknowledged receipt. Operator-specific intermediate outcome.
SentItem sent and in transit.
DeliveredSuccessfully delivered to the recipient.
DeclinedRecipient refused acceptance of the postal communication.
RejectedRecipient rejected the postal communication.
HinderedDelivery was hindered by an external circumstance.
UndeliveredDelivery was not possible.
DisposedItem disposed of after an undelivered or returned outcome.
ExpiredDelivery could not be completed within the postal deadline.
CancelledCancelled by the issuer.
FailedA processing error prevented normal delivery.

Querying status

Use the Query endpoint as a fallback when callbacks lag or for batch reconciliation.

GET /v1/EviPost/Query

If Limit is omitted, the API defaults to 100. The default drops to 25 when IncludeAffidavitsOnResult is true.

Common filters:

  • WithLookupKeys=your-key — fetch by your correlation key.
  • WithUniqueIds=<UniqueId> — fetch a specific communication by its ID.
  • OnState=Closed — fetch only closed communications.

:::warning State and outcome filters require support guidance OnState and WithOutcome filters are available but contact support before using them in production — some state transitions generate internal intermediate values that are not exposed in the documented enum. :::


First-call walkthrough

This walkthrough takes you from zero to a completed EviPost with a downloaded affidavit. It covers the happy path: a registered postal communication sent to a single recipient.

What you need

  • API credentials for your environment
  • A PDF document to send (base64-encoded)
  • Recipient and issuer names, legal names, and physical addresses
  • A reachable HTTPS endpoint for callbacks, or a tool such as webhook.site for testing

Step 1 — Submit the postal communication

curl -X POST https://api.evicertia.com/v1/EviPost/Submit \
  -u "YOUR_USERNAME:YOUR_PASSWORD" \
  -H "Content-Type: application/json" \
  -H "X-Evi-IdempotencyToken: 550e8400-e29b-41d4-a716-446655440000" \
  -d '{
    "LookupKey": "EVIPOST-TEST-001",
    "Document": "<base64-encoded PDF>",
    "RecipientName": "Alice Martin",
    "RecipientLegalName": "Alice Martin García",
    "RecipientAddress": {
      "StreetAddress": "Calle Mayor 10",
      "PostalCode": "28001",
      "Locality": "Madrid",
      "Country": "ES"
    },
    "IssuerName": "Acme Corp",
    "IssuerLegalName": "Acme Corporation S.L.",
    "IssuerAddress": {
      "StreetAddress": "Paseo de la Castellana 200",
      "PostalCode": "28046",
      "Locality": "Madrid",
      "Country": "ES"
    },
    "Options": {
      "PostServiceType": "Registered",
      "CertificationLevel": "Advanced_EU",
      "AffidavitProfile": "AdvancedContentOnSubmit",
      "PushNotificationUrl": "https://your-endpoint.example.com/callbacks/evipost",
      "PushNotificationFilter": ["Sent", "Delivered", "Closed", "AffidavitPublished"]
    }
  }'

A successful response returns the uniqueId:

{
  "uniqueId": "69819c3e-0c0e-42b3-a792-a33b014a13a2"
}

Save this ID. It is your primary handle for all queries and callbacks.

Step 2 — Verify the state progresses

Poll the Query endpoint to confirm the EviPost moves through Submitted → Processed → Dispatched → Issued → Sent:

curl "https://api.evicertia.com/v1/EviPost/Query?WithUniqueIds=69819c3e-0c0e-42b3-a792-a33b014a13a2" \
  -u "YOUR_USERNAME:YOUR_PASSWORD"

Expected response once submitted:

{
  "totalMatches": 1,
  "results": [
    {
      "evidenceId": "69819c3e-0c0e-42b3-a792-a33b014a13a2",
      "lookupKey": "EVIPOST-TEST-001",
      "state": "Sent",
      "outcome": "None"
    }
  ]
}

EviPost tracks a physical postal delivery. Sent means the item was handed to the postal operator. Further state changes (Delivered, Undelivered, etc.) depend on the operator and can take days.

Step 3 — Receive callbacks

Depending on the postal operator, you will receive callbacks for one or more source-supported filters such as Sent, Delivered, Disposed, and Closed. Undelivered is reflected in the Query response and final outcome data, not as a standalone push-filter value. When the postal process reaches its end, a Closed callback fires with Outcome in AdditionalData.

Do not assume Closed arrives immediately — postal lifecycles typically take days or weeks. Design your callback handler to handle each event independently.

Step 4 — Download the affidavit

When you receive an AffidavitPublished callback, use the AffidavitId from its AdditionalData to download the PDF through the shared download APIs. You can also list the generated affidavits and their IDs at any time via Query:

curl "https://api.evicertia.com/v1/EviPost/Query?WithUniqueIds=69819c3e-0c0e-42b3-a792-a33b014a13a2&IncludeAffidavitsOnResult=true" \
  -u "YOUR_USERNAME:YOUR_PASSWORD"

The response includes an affidavits array with the metadata (ID, name, and kind) of each generated affidavit.

Step 5 — Test the failure path

Re-run the walkthrough with a PDF that exceeds the allowed page count, or use an invalid address. Confirm that:

  • the Submit returns a 400 Bad Request with a responseStatus body describing the error
  • no UniqueId is created for the failed request
  • retrying with the same idempotency token and a corrected payload resubmits successfully

Integration checklist

  • Set LookupKey on every Submit and persist uniqueId from the response.
  • Send X-Evi-IdempotencyToken (UUID) on every Submit. Treat 202 Accepted as success.
  • Set AffidavitsOnDemandEnabled: true at submit time if you may need to call AffidavitRequest later — this cannot be enabled retroactively.
  • Subscribe to AffidavitPublished in PushNotificationFilter if you download affidavits programmatically.
  • Design for an asynchronous, days-long lifecycle — do not expect state changes within minutes.
  • Do not depend on Issued callbacks — plan for the direct Dispatched → Sent path since not all operators report this step.
  • Make your callback handler idempotent, keyed on Identifier.
  • Use Query as a fallback when callbacks lag — postal events can arrive in bursts or with delays.
  • When using notary retention (NotaryRetentionPeriod > 0), always provide a valid NotaryProfile.

Troubleshooting

SymptomLikely causesWhat to checkWhat to do
Communication closed immediately as FailedInvalid PDF document; page count exceeds subscribed tierSubmit responseStatus.errors[]; Query shows the failure state when an evidence was createdFix the document and resubmit with a new idempotency token
No state changes after ProcessedPostal operator has not yet acknowledged; normal for Registered typeProcessedOn timestamp in QueryWait — postal operator events can take hours
No Issued callbackOperator or service profile does not report this stepPostServiceType in your submit requestExpected for some operators — continue monitoring for Sent
Communication stays in Sent for daysNormal for international or standard postal deliverySentOn timestamp; postal operator delivery timelinesWait — do not resubmit. EviPost has no submit-configurable time-to-live; the lifecycle follows postal-operator timelines
Undelivered outcome receivedRecipient not at address; address incorrect; delivery limit reachedDetails in the Delivered or Closed callback, and the Query responseContact recipient; consider resubmitting to a corrected address
Affidavit not availableGeneration is asynchronous; AffidavitPublished has not fired yet; profile does not generate affidavits for this eventQuery with IncludeAffidavitsOnResult=trueWait for AffidavitPublished callback
On-demand affidavit request rejectedAffidavitsOnDemandEnabled was not set to true at submission; AffidavitProfile is not AdvancedOriginal submit requestCannot be enabled retroactively — resubmit with correct settings
Submit → 400 Bad RequestMissing required field; invalid certification level; document too large or invalid formatresponseStatus.errors[]Fix flagged field; retry with new idempotency token
Submit → 401 UnauthorizedWrong environment URL; credentials rotatedAuthorization headerRe-issue credentials
Submit → 403 ForbiddenAccount not provisioned for EviPostAccount permissionsContact your Namirial Notify account manager