Ir al contenido

Complete an issuer onboarding

POST
/v1/issuer-onboardings/{onboardingId}/complete
curl --request POST \
--url https://api.flashpi.com.ec/v1/issuer-onboardings/example/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "ruc": "1712345678001", "legalName": "example", "tradeName": "example", "headOfficeAddress": "example", "taxProfile": { "keepsAccounting": true, "specialTaxpayerNumber": "5368", "withholdingAgentResolution": "1", "rimpeRegime": "entrepreneur", "largeTaxpayerResolution": "NAC-GCFOIOC21-00000868-E" }, "branding": { "brandColor": "#0f766e" }, "sendEmailByDefault": true }'

Creates the issuer with the tax profile sent (the same fields as POST /v1/issuers; start from prefill), its establishment 001 at the head office and emission point 001; or, when the account already has the certificate’s RUC (existingIssuer), adds the certificate to that issuer without changing it (the body may be {}). The certificate serves test and live documents and starts processing: retrieve it under the issuer. The tax profile is the customer’s responsibility. Requires an account-scoped (global) API key with read_write access, of either mode: the certificate serves test and live documents.

onboardingId
required
string
Idempotency-Key
string
>= 1 characters <= 255 characters /^[\x21-\x7E]+$/

Makes the request safe to retry: 1 to 255 visible ASCII characters (a UUID works well), remembered for 24 hours per account and mode. A retry with the same key and the same request returns the first successful response again, with the header Idempotent-Replayed: true. The same key with a different request gets 422 idempotency_key_reused; while the first request still runs, 409 idempotency_key_in_progress. A failed request does not keep its key.

Accept-Language
string

Language of error messages and of the localized texts of resources (SRI messages, failures, certificate rejections): Spanish when the entry with the highest q-value is es or es- plus a region (es-EC, es-419), English otherwise. Errors state it in Content-Language.

X-Correlation-Id
string
>= 1 characters <= 128 characters /^[A-Za-z0-9._:/+=-]{1,128}$/

Your own ID for the request (letters, digits and -_.:/+=), echoed back in the X-Correlation-Id response header and logged next to the request ID. An invalid value gets 400 invalid_correlation_id.

Media typeapplication/json

The issuer to create, with the same fields as POST /v1/issuers (legalName, headOfficeAddress and taxProfile are required for a new issuer). For a renewal (existingIssuer) the body may be {}: the issuer is not changed (PATCH it if needed).

object
ruc

Required when the RUC did not come from the certificate (rucNeedsConfirmation): the proposed RUC or another one whose first 10 digits are the holder’s cédula. Otherwise it may be left out, and must be the certificate’s RUC when sent (422 ruc_mismatch).

string
/^[0-9]{10}001$/

Example

1712345678001
legalName

Razón social.

string
>= 1 characters <= 300 characters
tradeName

Nombre comercial.

string | null
>= 1 characters <= 300 characters
headOfficeAddress

Dirección matriz.

string
>= 1 characters <= 300 characters
taxProfile
object
keepsAccounting
required

Whether the taxpayer is required to keep accounting (obligado a llevar contabilidad).

boolean
specialTaxpayerNumber

Special taxpayer (contribuyente especial) resolution number: 3 to 13 letters or digits.

string | null
/^[A-Za-z0-9]{3,13}$/

Example

5368
withholdingAgentResolution

Withholding agent (agente de retención) designation resolution number, digits only. Stored without leading zeros (at most 8 digits).

string | null
/^[0-9]+$/

Example

1
rimpeRegime

RIMPE regime: entrepreneur (CONTRIBUYENTE RÉGIMEN RIMPE) or popular_business (CONTRIBUYENTE NEGOCIO POPULAR - RÉGIMEN RIMPE). Null when not in RIMPE.

string | null
Allowed values: entrepreneur popular_business
largeTaxpayerResolution

Large taxpayer (gran contribuyente) designation resolution number.

string | null
>= 1 characters <= 300 characters

Example

NAC-GCFOIOC21-00000868-E
branding
object
brandColor

Brand color of the RIDE PDF, #RRGGBB (returned in lowercase).

string | null
/^#[0-9A-Fa-f]{6}$/

Example

#0f766e
sendEmailByDefault

As in POST /v1/issuers.

boolean
default: true
Media typeapplication/json

The issuer (created, with establishment 001 and emission point 001, or the existing one for a renewal) and its new certificate, processing until Flashpi onboards it.

object
issuer
required

A taxpayer (RUC) that issues documents.

object
id
required
string format: uuid
ruc
required

RUC: 13 digits ending in 001 (format only; the check digit is not verified).

string
/^[0-9]{10}001$/
legalName
required

Legal name (razón social) as registered in the RUC.

string
>= 1 characters <= 300 characters
tradeName
required

Trade name (nombre comercial).

string | null
>= 1 characters <= 300 characters
headOfficeAddress
required

Head office address (dirección matriz).

string
>= 1 characters <= 300 characters
taxProfile
required

Tax profile; Flashpi adds the mandatory tags and legends from it.

object
keepsAccounting
required

Whether the taxpayer is required to keep accounting (obligado a llevar contabilidad).

boolean
specialTaxpayerNumber
required

Special taxpayer (contribuyente especial) resolution number: 3 to 13 letters or digits.

string | null
/^[A-Za-z0-9]{3,13}$/
withholdingAgentResolution
required

Withholding agent (agente de retención) designation resolution number, digits only. Stored without leading zeros (at most 8 digits).

string | null
/^[0-9]+$/
rimpeRegime
required

RIMPE regime: entrepreneur (CONTRIBUYENTE RÉGIMEN RIMPE) or popular_business (CONTRIBUYENTE NEGOCIO POPULAR - RÉGIMEN RIMPE). Null when not in RIMPE.

string | null
Allowed values: entrepreneur popular_business
largeTaxpayerResolution
required

Large taxpayer (gran contribuyente) designation resolution number.

string | null
>= 1 characters <= 300 characters
branding
required

RIDE branding of the issuer.

object
brandColor
required

Brand color of the RIDE PDF, #RRGGBB (returned in lowercase).

string | null
/^#[0-9A-Fa-f]{6}$/
sendEmailByDefault
required

Default of a document request’s options.sendEmail: true emails every authorized document (RIDE PDF and XML) to its buyer, false opts the issuer out. A request that sets options.sendEmail decides for itself.

boolean
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
certificate
required

An issuer’s .p12 signing certificate. Flashpi checks the upload asynchronously (processing, then accepted or rejected); the file and its password are never returned.

object
id
required
string format: uuid
issuerId
required
string format: uuid
environment
required

Mode of the API key that uploaded it. A certificate of the issuer onboarding serves every mode (allModes): it shows the mode of the API key that reads it.

string
Allowed values: test live
allModes
required

Whether it serves every mode (test and live): a certificate uploaded through the issuer onboarding (POST /v1/issuer-onboardings). False for one uploaded for one mode.

boolean
status
required
string
Allowed values: processing accepted rejected
usable
required

Whether it signs documents now: accepted, within its validity and not blocked.

boolean
subject
required

Subject distinguished name.

string | null
issuedBy
required

Distinguished name of the certification authority that issued it.

string | null
serialNumber
required
string | null
validFrom
required
string | null format: date-time
validUntil
required
string | null format: date-time
sha256Fingerprint
required

SHA-256 of the certificate, hex.

string | null
ruc
required

The RUC found in the certificate, when its authority writes one.

string | null
revocation
required
Any of:

Whether the certification authority revoked the certificate. good: verified not revoked. pending: could not be verified yet; it still signs until blockAt and is checked again hourly. blocked: still unverified after 7 days, or its chain is no longer trusted (blockedReason); it does not sign. revoked: never signs again.

object
status
required
string
Allowed values: good pending blocked revoked
checkedAt
required
string format: date-time
nextCheckAt
required
string | null format: date-time
blockAt
required

Pending only: when it stops signing if still unverified.

string | null format: date-time
blockedReason
required
string | null
Allowed values: revocation_status_unverified untrusted_certificate_chain
rejection
required
Any of:

Why the upload was rejected.

object
code
required
string
message
required
string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time

Example

{
"issuer": {
"id": "01a13eca-2e80-7c3d-9f21-5b8e4a6d0c17",
"ruc": "1790000000001",
"legalName": "Supermercados La Pradera S.A.",
"tradeName": "La Pradera",
"headOfficeAddress": "Av. Amazonas N34-12 y Av. Atahualpa, Quito",
"taxProfile": {
"specialTaxpayerNumber": "5368",
"withholdingAgentResolution": "1",
"rimpeRegime": "entrepreneur",
"largeTaxpayerResolution": "NAC-GCFOIOC21-00000868-E"
},
"branding": {
"brandColor": "#0f766e"
},
"sendEmailByDefault": true
},
"certificate": {
"environment": "test",
"status": "processing",
"serialNumber": "4f2a9c01",
"ruc": "1790000000001",
"revocation": {
"status": "good",
"blockedReason": "revocation_status_unverified"
},
"rejection": {
"code": "invalid_password",
"message": "The password does not open the .p12 file."
}
}
}
Location
string

Path of the issuer: /v1/issuers/{issuer.id}. Not sent on an idempotent replay (Idempotent-Replayed: true): build it from the body as shown.

Idempotent-Replayed
string
Allowed values: true

true when this is the stored answer of an earlier request with the same Idempotency-Key (same status and body, no Location). Absent otherwise.

X-Request-Id
string format: uuid

Flashpi’s ID of the request, a UUIDv7 (also requestId in errors). Include it when you contact support.

malformed_json: the body is not valid JSON. bad_request: the body does not decompress with its Content-Encoding. Or invalid_idempotency_key: the Idempotency-Key header is malformed.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

authentication_required: no Authorization: Bearer header. invalid_api_key: the key is malformed, unknown or revoked.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}
WWW-Authenticate
string

RFC 6750 challenge: Bearer realm="flashpi", plus error="invalid_token" with invalid_api_key.

The API key cannot perform this operation: key_scope_mismatch, key_read_only or ip_not_allowed; or its account is suspended (account_suspended).

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

Not_found

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

Issuer_onboarding_not_ready (still verifying), issuer_onboarding_rejected, issuer_onboarding_completed, issuer_onboarding_expired, or issuer_already_exists. Or idempotency_key_in_progress: a request with this Idempotency-Key is still running.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

payload_too_large: the JSON body is larger than 1 MB.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

unsupported_media_type: the body declares a charset that does not start with utf- (for example latin1, or utf8 without the hyphen) or a Content-Encoding other than gzip, deflate or br.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

Validation_failed: a field of a new issuer is missing or invalid, ruc is required, or ruc does not match the certificate (ruc_mismatch). Or idempotency_key_reused: the Idempotency-Key was used with a different request.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}