SimPayDocs

    Submit Onboarding Form

    Submits the data collected by your own form together with the identification documents encoded in base64. The request is accepted with `202 Accepted` and the analysis runs asynchronously, so keep polling the status endpoint until the journey is finished.

    POSThttps://api.somossimpay.com.br/v3/onboarding/{onboarding_requisition_id}/submit
    curl --request POST \
      --url 'https://api.somossimpay.com.br/v3/onboarding/{onboarding_requisition_id}/submit' \
      --header 'X-Onboarding-Token: 8bR3xTqZ0pW7yLm2nV4cJdH6sKfA1gQeUoI9tXyZbCk' \
      --header 'Content-Type: application/json' \
      --data '{
      "company": {
        "official_name": "Example Company LTDA",
        "fantasy_name": "Example Company",
        "company_email": "finance@example.com",
        "phone_number": "11999998888",
        "opening_date": "2015-03-10",
        "zip_code": "01310100",
        "state": "SP",
        "city": "Sao Paulo",
        "street": "Avenida Paulista",
        "neighborhood": "Bela Vista",
        "number": "1000",
        "complement": "12th floor"
      },
      "partners": [
        {
          "name": "Joao da Silva",
          "cpf": "111.444.777-35",
          "birth_date": "1988-07-21",
          "mother_name": "Maria da Silva",
          "father_name": "Jose da Silva",
          "rg": "123456789",
          "rg_issuing_authority": "SSP",
          "rg_issue_state": "SP",
          "rg_issue_date": "2010-02-15",
          "birth_place": "Sao Paulo",
          "birth_state": "SP",
          "nationality": "Brazilian",
          "email": "joao.silva@example.com",
          "phone_number": "11988887777",
          "ownership_pct": 60,
          "is_legal_representative": true
        },
        {
          "name": "Ana Souza",
          "cpf": "529.982.247-25",
          "birth_date": "1991-11-02",
          "mother_name": "Clara Souza",
          "email": "ana.souza@example.com",
          "phone_number": "11977776666",
          "ownership_pct": 40,
          "is_legal_representative": false
        }
      ],
      "documents": [
        {
          "type": "RG_FRONT",
          "partner_cpf": "111.444.777-35",
          "filename": "joao-id-front.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgAA..."
        },
        {
          "type": "RG_BACK",
          "partner_cpf": "111.444.777-35",
          "filename": "joao-id-back.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgBB..."
        },
        {
          "type": "IMAGE_FRONT",
          "partner_cpf": "529.982.247-25",
          "filename": "ana-id-front.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgCC..."
        },
        {
          "type": "COMPANY_SOCIAL_CONTRACT",
          "partner_cpf": null,
          "filename": "social-contract.pdf",
          "mime_type": "application/pdf",
          "content": "JVBERi0xLjQKJeLjz9MK..."
        },
        {
          "type": "OTHER",
          "partner_cpf": null,
          "filename": "proof-of-address.pdf",
          "mime_type": "application/pdf",
          "content": "JVBERi0xLjQKJeHqz9MK..."
        }
      ],
      "accepted_terms": true
    }'
    Response200
    {
      "worked": true,
      "onboarding_requisition_id": 10482,
      "submitted_at": "2026-09-15T18:42:07.512000Z"
    }

    Endpoint

    POST /v3/onboarding/{onboarding_requisition_id}/submit

    This is the last step of the own-form flow. It comes after POST /v3/onboarding/form and, when the onboarding requires the proof of life, after the end user has passed the liveness. It can only be called once per onboarding requisition.

    The response is returned as soon as the payload is accepted and stored — it does not mean the onboarding was approved. The analysis runs in background; keep polling the onboarding status endpoint (GET /v3/onboarding/10482) until current_step becomes DONE.

    Headers

    ParameterTypeDescriptionRequired or OptionalExample
    X-Onboarding-TokenStringThe access_token returned when the onboarding requisition was created. It authorizes every call made against that requisition. A missing or wrong token returns 404.required8bR3xTqZ0pW7yLm2nV4cJdH6sKfA1gQeUoI9tXyZbCk
    Content-TypeStringFormat of the request body. Must be application/json.requiredapplication/json

    Path Parameters

    ParameterTypeDescriptionRequiredExample
    onboarding_requisition_idIntegerIdentifier of the onboarding requisition returned when the requisition was created.Yes10482

    Body Details

    {
      "company": {
        "official_name": "Example Company LTDA",
        "fantasy_name": "Example Company",
        "company_email": "finance@example.com",
        "phone_number": "11999998888",
        "opening_date": "2015-03-10",
        "zip_code": "01310100",
        "state": "SP",
        "city": "Sao Paulo",
        "street": "Avenida Paulista",
        "neighborhood": "Bela Vista",
        "number": "1000",
        "complement": "12th floor"
      },
      "partners": [
        {
          "name": "Joao da Silva",
          "cpf": "11144477735",
          "birth_date": "1988-07-21",
          "mother_name": "Maria da Silva",
          "ownership_pct": 100,
          "is_legal_representative": true
        }
      ],
      "documents": [
        {
          "type": "RG_FRONT",
          "partner_cpf": "11144477735",
          "filename": "id-front.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgAA..."
        },
        {
          "type": "COMPANY_SOCIAL_CONTRACT",
          "partner_cpf": null,
          "filename": "social-contract.pdf",
          "mime_type": "application/pdf",
          "content": "JVBERi0xLjQKJeLjz9MK..."
        }
      ],
      "accepted_terms": true
    }
    FieldTypeDescriptionRequired or Optional
    companyObjectCompany details collected by your form. Required for PJ onboarding and not allowed for PF onboarding. Only the fields you send are updated; omitted fields keep the value already on the requisition.required for PJ / forbidden for PF
    partnersArrayList of the people declared in the form. At least one item. For PF it must contain exactly one item.required
    documentsArrayList of files encoded in base64. At least one item.required
    accepted_termsBooleanConfirmation that the end user accepted the terms in your form. Must be true; any other value is rejected with 400.required

    company

    Every field of the company object is individually optional — send what your form collected. The object itself is required for PJ onboarding.

    FieldTypeDescriptionRequired or Optional
    official_nameStringRegistered legal name of the company. Maximum 255 characters.optional
    fantasy_nameStringTrade name of the company. Maximum 255 characters.optional
    company_emailStringContact email of the company. Must be a valid email address.optional
    phone_numberStringContact phone number. Maximum 20 characters.optional
    opening_dateDateDate the company was opened. Format YYYY-MM-DD.optional
    zip_codeStringPostal code of the company address. Maximum 10 characters.optional
    stateStringState abbreviation of the company address. Maximum 2 characters.optional
    cityStringCity of the company address. Maximum 100 characters.optional
    streetStringStreet of the company address. Maximum 255 characters.optional
    neighborhoodStringNeighborhood of the company address. Maximum 100 characters.optional
    numberStringStreet number of the company address. Maximum 20 characters.optional
    complementStringAddress complement (floor, unit, reference). Maximum 100 characters.optional

    partners

    Each item of the partners array describes one person declared in the form.

    FieldTypeDescriptionRequired or Optional
    nameStringFull name of the person. Maximum 255 characters.required
    cpfStringCPF of the person. The mask is stripped and the check digits are validated; an invalid CPF is rejected with 400 (message partners[0].cpf: Invalid CPF). Must be unique within the array. Send it as a JSON string. A number is rejected with 400 (Input should be a valid string): JSON drops a leading zero, so a document starting with 0 would arrive truncated.required
    birth_dateDateDate of birth. Format YYYY-MM-DD.optional
    mother_nameStringMother's full name. Maximum 100 characters.optional
    father_nameStringFather's full name. Maximum 100 characters.optional
    rgStringIdentity card number. Maximum 20 characters.optional
    rg_issuing_authorityStringAuthority that issued the identity card. Maximum 10 characters.optional
    rg_issue_stateStringState that issued the identity card. Maximum 2 characters.optional
    rg_issue_dateDateIssue date of the identity card. Format YYYY-MM-DD.optional
    birth_placeStringCity of birth. Maximum 255 characters.optional
    birth_stateStringState of birth. Maximum 2 characters.optional
    nationalityStringNationality of the person. Maximum 50 characters.optional
    emailStringContact email of the person. Must be a valid email address.optional
    phone_numberStringContact phone number. Maximum 20 characters.optional
    ownership_pctDecimalOwnership percentage held by the person, from 0 to 100. For PJ the values of all partners must sum exactly 100. For PF send 100.required
    is_legal_representativeBooleanMarks the person who legally represents the company. For PJ exactly one partner must have it as true, and that partner's CPF must match representative_document from creation. Defaults to false when omitted.optional

    documents

    Each item of the documents array carries one file encoded in base64.

    FieldTypeDescriptionRequired or Optional
    typeStringType of the file. Canonical values: IMAGE_FRONT, IMAGE_BACK, SELFIE, COMPANY_SOCIAL_CONTRACT, OTHER. Front/back aliases are also accepted and mapped internally — see Document types below. The comparison is case-insensitive.required
    partner_cpfStringCPF of the person the file belongs to. Required for IMAGE_FRONT, IMAGE_BACK and SELFIE, and the CPF must match one of the partners sent in the same request. Optional for OTHER: sent with a CPF the file is stored under that partner and comes back in pf_data[].documents; omitted, it belongs to the requisition. Must be omitted for COMPANY_SOCIAL_CONTRACT — sending it is rejected with 400 (COMPANY_SOCIAL_CONTRACT must not have a partner cpf.), because the contract is verified against the company and a copy filed under a partner never reaches that check. A value that is not a valid CPF is rejected with 400 (documents[0].partner_cpf: Invalid partner CPF), and so is a CNPJ — the owner of a file is always a person. Send it as a JSON string. A number is rejected with 400 (Input should be a valid string): JSON drops a leading zero, so a document starting with 0 would arrive truncated.required for personal files
    filenameStringOriginal file name, including the extension. Maximum 255 characters.required
    mime_typeStringMedia type of the file, such as image/jpeg, image/png or application/pdf. Maximum 100 characters.required
    contentStringFile content as raw base64, without the data: prefix. A value starting with data: is rejected with 400 (message documents[0].content: content must be raw base64, without the data: prefix), and content that is not valid base64 is also rejected with 400.required

    Document types:

    ValueBelongs toDescription
    IMAGE_FRONTPartnerFront of the identification document. Mandatory for every partner sent.
    IMAGE_BACKPartnerBack of the identification document. Optional — single-face documents have no back.
    SELFIEPartnerPhoto of the person's face. Mandatory for every partner when the requisition runs without liveness; optional otherwise, since the liveness already captures one.
    COMPANY_SOCIAL_CONTRACTRequisitionCompany incorporation document. Mandatory for PJ, rejected for PF. Never takes a partner_cpf.
    OTHERRequisition or partnerAny additional supporting file, such as a proof of address. With a partner_cpf it belongs to that person; without one, to the requisition.

    Front and back also accept the aliases below. They are stored as IMAGE_FRONT or IMAGE_BACK; the rest of the rules (partner_cpf, mandatory front per partner) apply to the mapped type. An unknown value is rejected with 400.

    Alias (case-insensitive)Stored as
    RG_FRONTIMAGE_FRONT
    CNH_FRONTIMAGE_FRONT
    RNE_FRONTIMAGE_FRONT
    CNHIMAGE_FRONT
    PASSPORTIMAGE_FRONT
    RG_BACKIMAGE_BACK
    CNH_BACKIMAGE_BACK
    RNE_BACKIMAGE_BACK

    Request Examples

    PJ onboarding (company with two partners):

    POST /v3/onboarding/10482/submit
    X-Onboarding-Token: 8bR3xTqZ0pW7yLm2nV4cJdH6sKfA1gQeUoI9tXyZbCk
    Content-Type: application/json
    
    {
      "company": {
        "official_name": "Example Company LTDA",
        "fantasy_name": "Example Company",
        "company_email": "finance@example.com",
        "phone_number": "11999998888",
        "opening_date": "2015-03-10",
        "zip_code": "01310100",
        "state": "SP",
        "city": "Sao Paulo",
        "street": "Avenida Paulista",
        "neighborhood": "Bela Vista",
        "number": "1000",
        "complement": "12th floor"
      },
      "partners": [
        {
          "name": "Joao da Silva",
          "cpf": "111.444.777-35",
          "birth_date": "1988-07-21",
          "mother_name": "Maria da Silva",
          "father_name": "Jose da Silva",
          "rg": "123456789",
          "rg_issuing_authority": "SSP",
          "rg_issue_state": "SP",
          "rg_issue_date": "2010-02-15",
          "birth_place": "Sao Paulo",
          "birth_state": "SP",
          "nationality": "Brazilian",
          "email": "joao.silva@example.com",
          "phone_number": "11988887777",
          "ownership_pct": 60,
          "is_legal_representative": true
        },
        {
          "name": "Ana Souza",
          "cpf": "529.982.247-25",
          "birth_date": "1991-11-02",
          "mother_name": "Clara Souza",
          "email": "ana.souza@example.com",
          "phone_number": "11977776666",
          "ownership_pct": 40,
          "is_legal_representative": false
        }
      ],
      "documents": [
        {
          "type": "RG_FRONT",
          "partner_cpf": "111.444.777-35",
          "filename": "joao-id-front.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgAA..."
        },
        {
          "type": "RG_BACK",
          "partner_cpf": "111.444.777-35",
          "filename": "joao-id-back.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgBB..."
        },
        {
          "type": "IMAGE_FRONT",
          "partner_cpf": "529.982.247-25",
          "filename": "ana-id-front.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgCC..."
        },
        {
          "type": "COMPANY_SOCIAL_CONTRACT",
          "partner_cpf": null,
          "filename": "social-contract.pdf",
          "mime_type": "application/pdf",
          "content": "JVBERi0xLjQKJeLjz9MK..."
        },
        {
          "type": "OTHER",
          "partner_cpf": null,
          "filename": "proof-of-address.pdf",
          "mime_type": "application/pdf",
          "content": "JVBERi0xLjQKJeHqz9MK..."
        }
      ],
      "accepted_terms": true
    }

    PF onboarding (individual, no company object):

    POST /v3/onboarding/10483/submit
    X-Onboarding-Token: 4kQ2wYpN8zR1vBc6mXsLd0TgHj7fEa3UiOy5nPzWqRs
    Content-Type: application/json
    
    {
      "partners": [
        {
          "name": "Joao da Silva",
          "cpf": "111.444.777-35",
          "birth_date": "1988-07-21",
          "mother_name": "Maria da Silva",
          "rg": "123456789",
          "rg_issuing_authority": "SSP",
          "rg_issue_state": "SP",
          "birth_place": "Sao Paulo",
          "birth_state": "SP",
          "nationality": "Brazilian",
          "email": "joao.silva@example.com",
          "phone_number": "11988887777",
          "ownership_pct": 100,
          "is_legal_representative": true
        }
      ],
      "documents": [
        {
          "type": "IMAGE_FRONT",
          "partner_cpf": "111.444.777-35",
          "filename": "id-front.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgAA..."
        },
        {
          "type": "IMAGE_BACK",
          "partner_cpf": "111.444.777-35",
          "filename": "id-back.jpg",
          "mime_type": "image/jpeg",
          "content": "iVBORw0KGgoAAAANSUhEUgBB..."
        }
      ],
      "accepted_terms": true
    }

    Response Details

    HTTP 202 Accepted

    {
      "worked": true,
      "onboarding_requisition_id": 10482,
      "submitted_at": "2026-09-15T18:42:07.512000Z"
    }
    FieldTypeDescription
    workedBooleanAlways true for successful requests.
    onboarding_requisition_idIntegerIdentifier of the onboarding requisition the form was submitted for.
    submitted_atDateTimeDate and time the form was accepted, in UTC-0 (ISO 8601). The same value is returned by the status endpoint.

    202 Accepted means the payload was validated, stored and accepted for analysis — it is not an approval. From this point the requisition moves to current_step: PROCESSING; poll the onboarding status endpoint (GET /v3/onboarding/10482) until current_step becomes DONE and read status_internal (APPROVED or REJECTED) for the final outcome.

    Error Responses

    HTTP CodeError MessageDescription
    400company is required for PJ onboarding.A PJ onboarding was submitted without the company object.
    400company is not allowed for PF onboarding.A PF onboarding was submitted with a company object. Remove it from the payload.
    400PF onboarding takes exactly one partner, got 2.A PF onboarding must declare exactly one person in partners.
    400partner cpf must match the requisition document.On PF, the CPF of the single partner is different from the document used to create the onboarding requisition.
    400partners ownership_pct must sum 100, got 80.On PJ, the ownership_pct values of all partners must sum exactly 100.
    400exactly one partner must be the legal representative, got 2.On PJ, exactly one partner must have is_legal_representative as true.
    400legal representative cpf does not match the representative_document informed at creation.On PJ without the proof of life, the partner marked as legal representative is not the CPF sent as representative_document when the requisition was created.
    400duplicated partner cpf.The same CPF appears more than once in partners. Each person may be declared only once.
    400document of type SELFIE requires a partner cpf.A document of type IMAGE_FRONT, IMAGE_BACK or SELFIE was sent without a partner_cpf.
    400COMPANY_SOCIAL_CONTRACT must not have a partner cpf.The articles of incorporation belong to the company. Omit partner_cpf; with one, the file is filed under the partner and is left out of the company verification.
    400COMPANY_SOCIAL_CONTRACT is not allowed for PF onboarding.A PF onboarding has no company, so it takes no articles of incorporation.
    400documents[0].partner_cpf: Invalid partner CPFThe partner_cpf of a document is not a valid CPF. Send a valid CPF, or omit the field when the file belongs to the company.
    400document references unknown partner cpf 52998224725.The partner_cpf of a document does not match any CPF declared in partners in the same request.
    400missing COMPANY_SOCIAL_CONTRACT document.A PJ onboarding was submitted without the company incorporation document.
    400partner 11144477735 is missing IMAGE_FRONT.Every partner declared in the payload needs a front-of-ID image. Add an IMAGE_FRONT document with that partner_cpf.
    400partner 11144477735 is missing SELFIE.The requisition runs without liveness, so every partner also needs a selfie. Add a SELFIE document with that partner_cpf.
    400documents.0.content is not valid base64.The content of the document at that position could not be decoded. Send raw base64 without the data: prefix and without truncating the value.
    400liveness document does not match the legal representative cpf.The person who passed the liveness is not the partner marked as legal representative (PJ) or the single declared partner (PF).
    400Liveness did not identify a partner to match against.The liveness did not record which person completed it, so the form cannot be tied to it. Reconcile the verdict with the liveness refresh endpoint before submitting again.
    400liveness did not store a selfie for the legal representative.The liveness finished without a usable photo of that person. Reconcile the verdict with the liveness refresh endpoint, or start a new liveness attempt.
    400partners[0].cpf: Invalid CPFRequest validation failed. The message is <field path>: <reason>. Causes: an invalid CPF, accepted_terms different from true, content starting with the data: prefix, ownership_pct outside 0-100, an empty partners/documents array, a missing required field, a field longer than its maximum length, or an unknown documents[].type.
    404Onboarding requisition not found.The onboarding requisition does not exist, or the X-Onboarding-Token header is missing or does not match the requisition.
    409Form already submitted.The form was already submitted for this requisition. A form can only be submitted once; poll the status endpoint to follow the analysis.
    412Onboarding does not use the platform form.The requisition belongs to the provider-hosted journey, which collects the data on the provider page. There is no form to submit here.
    412Liveness has not passed yet.The requisition requires the proof of life and the end user has not completed it. Wait until liveness_status is PASSED before submitting the form. Not raised when the requisition runs without liveness.
    413id-front.jpg exceeds 8388608 bytes.A single file is larger than 8 MB once decoded. Compress or resize the file before encoding it.
    413documents exceed 26214400 bytes in total.The sum of all decoded files in the request is larger than 25 MB. Reduce the number or size of the files.

    Business Rules

    Preconditions:

    • The requisition must use the platform form. One created for the provider-hosted journey is rejected with 412 (Onboarding does not use the platform form.).
    • When the requisition requires liveness, it must have passed. While liveness_status is PENDING or FAILED, the call is rejected with 412. A requisition configured without liveness skips this check and carries a SELFIE per partner instead.
    • The form can be submitted only once per onboarding requisition. A second call is rejected with 409, even if the first payload had a mistake.
    • The payload is validated as a whole before anything is stored: when any rule fails, nothing is persisted and you can fix the payload and call again.

    PJ onboarding:

    • The company object is required.
    • The ownership_pct of all partners must sum exactly 100.
    • Exactly one partner must have is_legal_representative as true, and that partner's CPF must be the same representative_document sent when the requisition was created. A different CPF is rejected with 400.
    • A COMPANY_SOCIAL_CONTRACT document is required.
    • When the requisition requires liveness, the person who passed it must be the partner marked as legal representative.

    PF onboarding:

    • The company object must not be sent.
    • partners must contain exactly one person.
    • The CPF of that person must be the same document used to create the onboarding requisition.
    • When the requisition requires liveness, the person who passed it must be that same person.

    Partners:

    • Each CPF is validated (mask is stripped and check digits verified) and must be unique within the request.
    • A person who already exists on the requisition — the legal representative created from representative_document who completed the liveness — is completed with the data you send, not duplicated.

    Documents:

    • Every partner declared in partners must have an IMAGE_FRONT document (or an alias that maps to it, such as RG_FRONT, CNH or PASSPORT). The back of the document is optional, since single-face documents such as a digital driver's licence or a passport have no back.
    • When the requisition runs without liveness, every partner must also have a SELFIE. Nothing else produces that photo, and the background check compares the face on the selfie with the face on the identification document. A partner without it is rejected with 400 (partner <cpf> is missing SELFIE.) before any file is uploaded. A selfie sent through the form keeps the face comparison but proves no presence, so choosing it over the liveness is a risk decision of whoever configures the onboarding.
    • IMAGE_FRONT, IMAGE_BACK and SELFIE must carry a partner_cpf, and that CPF must match one of the partners in the same request. The same applies after an alias is mapped to front or back.
    • COMPANY_SOCIAL_CONTRACT and OTHER are attached to the requisition when partner_cpf is null or omitted. If you do send a partner_cpf that matches one of the partners, the file is attached to that person instead; the request is not rejected.
    • content must be raw base64, without the data: prefix. Line breaks, spaces and missing = padding inside the value are tolerated and normalised before decoding.

    Limits:

    • Maximum 8 MB per file, measured after decoding the base64.
    • Maximum 25 MB for all files of the request combined, measured after decoding.
    • Requests above either limit are rejected with 413 and no file is stored.

    Important Notes:

    • The response is returned immediately with 202 Accepted; the analysis of the data and documents runs asynchronously.
    • 202 Accepted confirms only that the submission was received — it is not an approval decision.
    • Keep polling the onboarding status endpoint (GET /v3/onboarding/10482) until current_step is DONE. The final outcome is in status_internal: APPROVED or REJECTED.
    • Fields of the company object that you omit keep the value already registered on the requisition; they are not erased.
    • The CPF can be sent with or without a mask — 111.444.777-35 and 11144477735 are treated as the same document, in partners and in partner_cpf.