Skip to content

[Responses compatibility] Third-party providers reject requests containing unsupported access_programs parameter #4907

Closed

Description

@makesomethingshit

Client or integration

Codex App

Affected providers

Multiple third-party / OpenAI-compatible providers.

I first observed this with Console Go, but this is not specific to OpenCode Go.

Current behavior

When using recent Codex App versions through OpenCodex with third-party providers, some requests fail immediately because the upstream receives the Codex Responses API field access_programs.

Example error:

Error from provider (Console Go): Upstream request failed: [invalid_request_error] unknown parameter `access_programs`

I have observed the same class of failure with more than one provider, so this appears to be a generic Responses/provider compatibility issue rather than an OpenCode Go-specific problem.

Recent Codex versions include the optional field:

#[serde(skip_serializing_if = "Option::is_none")]
pub access_programs: Option<AccessPrograms>,

in ResponsesApiRequest.

The normal Codex request construction path currently initializes it as:

access_programs: None,

but Codex also has paths where access_programs may be populated and serialized onto the wire.

When such a request is routed through OpenCodex to a provider that does not implement this OpenAI/Codex-specific field, the upstream rejects the entire request.

Expected behavior

OpenCodex should normalize Responses API payloads according to the capabilities of the selected upstream provider.

For providers that do not support access_programs, the field should be stripped before forwarding.

If a provider supports an equivalent capability with a different representation, OpenCodex should translate it instead.

A Codex-specific optional request field should not make otherwise compatible third-party providers unusable.

Minimal reproduction

  1. Configure a third-party / OpenAI-compatible provider in OpenCodex.
  2. Use it from recent Codex App.
  3. Start a normal inference request.
  4. Observe the forwarded request being rejected by the upstream with an unknown-parameter error for access_programs.

Example:

[invalid_request_error] unknown parameter `access_programs`

Scope

This does not appear to be specific to OpenCode Go.

I have reproduced the same class of failure across multiple providers that otherwise accept Codex/OpenAI-compatible requests but do not recognize access_programs.

This suggests the compatibility boundary may belong in the generic Responses forwarding / provider normalization layer rather than in one provider-specific adapter.

Possible root cause

Not confirmed yet.

Two possibilities seem worth checking:

  1. Codex App is legitimately populating access_programs for some requests/models, and OpenCodex forwards it unchanged to providers that do not support it.
  2. OpenCodex reconstructs or preserves the field during Responses transformation without checking upstream capability.

Either way, the important invariant seems to be:

Provider-specific upstream requests should only contain fields supported by that provider.

Suggested direction

Before forwarding a Responses request to a third-party provider:

  • determine whether the provider supports access_programs;
  • strip it when unsupported;
  • or map it only for providers with an equivalent capability.

Ideally this should be handled in the common Responses compatibility layer rather than patched independently in each provider.

Notes

Codex currently defines access_programs directly in its Responses API request schema and skips serialization only when the value is None.

There are also explicit code/test paths where access_programs is populated and included in the wire payload, so treating it as a field that may legitimately arrive from newer Codex clients seems safer than assuming it will always be absent.

Checks

  • Searched existing issues for access_programs
  • Confirmed this is not limited to OpenCode Go
  • Removed API keys, account identifiers, and credentials
  • Exact provider list can be added if useful

Activity

  1. github-actions commented on Sep 17, 2026

    @github-actions
    Contributor

    Issue reopened

    The automated check no longer treats this report as insufficient detail (substantial structured content was found). Thanks for updating it.

  2. changed the title [-][Provider compatibility] OpenCode Go rejects Codex requests with unknown parameter `access_programs`[/-] [+][Responses compatibility] Third-party providers reject requests containing unsupported access_programs parameter[/+] on Sep 17, 2026
  3. lidge-jun commented on Sep 17, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 28 / 80

    이 이슈는 최근 Codex App이 Responses 요청에 access_programs를 붙이고, OpenCodex가 그걸 서드파티/OpenAI 호환 upstream에 그대로내서 unknown parameter access_programs`` 400이 난다는 보고다. 재현은 Console Go뿐 아니라 여러 제공자에서 같은 종류라고 했고, 고치려면 제공자 능력에 맞게 필드를 지우거나 번역하자는 방향이다.

    지금 dev HEAD 41f1832f6a893547f253d728bd93607e1793dd13(패키지 2.58.0)에는 이미 같은 구멍이 막혀 있다. #4884가 4b234da42로 머지됐고, 원본 이슈 #4853도 오늘 09:57 KST에 그 커밋으로 수동 클로즈됐다. src/adapters/openai-responses/request-strips.ts의 CANONICAL_ONLY_TOP_LEVEL_FIELDS에 access_programs가 들어 있고, stripCanonicalOnlyTopLevelFields가 OpenCodex가 운영하지 않는 destination에서만 그 키를 지운다. OpenAI/ChatGPT canonical destination에는 남긴다. tests/responses/responses-canonical-only-top-level-fields.test.ts가 서드파티에는 없고 canonical에는 남는 것, raw body 비변이, 미등록 키는 그대로 두는 것까지 잠근다.

    그래서 이 글은 새 버그 리포트라기보다 #4853의 중복(또는 이미 tip에 고친 뒤의 구버전 재보고)에 가깝다. 보고자가 아직 2.57.0 이하면 dev/2.58.0 쪽을 쓰는지부터 확인하면 된다. types.ts/config.ts 분할과는 무관하고, preview deploy도 아니다.

    한 가지 남는 판단은, 보고 본문이 「지원하면 번역」까지 넓게 적은 점이다. 지금 tip 해법은 관측된 private 키를 표로 지우는 쪽이지, 일반 unknown-field sanitizer나 capability 번역층이 아니다. 그게 의도다(#4884 클로즈 노트와 테스트 주석). 번역층이 필요하면 별 이슈로 새로 열어야 한다.

    정리하면 우선순위는 낮다. tip에는 이미 고쳤고 원본도 닫혔다. 같은 증상이 2.58.0/dev에서도 나면 그때는 strip 호출 경로(passthrough vs 다른 forward)를 새로 추적하면 된다.

    src/adapters/openai-responses/request-strips.ts - access_programs는 이미 CANONICAL_ONLY_TOP_LEVEL_FIELDS에 있다.
    #4853 / #4884 - 같은 결함의 원본·수정. #4853은 4b234da42로 클로즈됨.
    tests/responses/responses-canonical-only-top-level-fields.test.ts - 서드파티 strip / canonical keep 계약이 이미 있다.
    본문 suggested direction(번역층) - tip 해법 범위 밖. 새 요구면 별 이슈.

    메인테이너의 판단이 필요한 지점

    • 중복으로 바로 닫을지, 보고자 버전을 한 번 물어보고 닫을지
    • access_programs 외 새 private top-level 키가 또 왔는지(표에 추가할 관측인지)

    너의 추천
    #4853 중복·이미 #4884로 tip 수정 완료로 클로즈. 보고자에게 2.58.0/dev에서 재현되면 새 경로를 적어 달라고 안내.

    이 댓글은 grok-bot이 작성했습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingproviderProvider adapters, OpenAI-compat presets, upstream API quirksprovider-compatibilityProvider compatibility reports

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions